------- android培训、java培训、期待与您交流! ----------
1.快速排序:它通过一趟排序将要排序的元素分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分元素分别进行快速排序,整个排序以递归的方式进行,从而最终使所有元素有序。
2.选择排序:每一趟从待排序的元素中选出最小的一个元素,顺序放在已排好序的数列的一端,直到全部待排序的元素变得有序。
3.冒泡排序:它通过不断遍历要排序的数列,每次比较两个元素,交换顺序错误的元素。一直重复遍历交换直到没有需要交换的元素为止。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
package com.itheima;
/**
* 几种简单的排序算法的实现
* @author Ryan
*/
public class SortUtils {
/*
* 快速排序
* */
public static void quickSort(int[] arr,int low,int high)
{
int temp;//定义一个变量用于存放枢轴
int left = low,right = high;
if (low<high){
temp = arr[low];
//该循环完成了一趟排序,将大于枢轴的元素放在右边,而小于枢轴的元素放在左边
while(left!=right){
while(right>left&&arr[right]>temp)//从右往左寻找一个小于枢轴的元素
right--;
if(left<right){
arr[left] = arr[right];//将这个找到的元素放在枢轴左边
left++;
}
while(left<right&&arr[left]<temp)//从左往右寻找一个大于枢轴的元素
left++;
if(left<right){
arr[right] = arr[left];//将这个找到的元素放在枢轴右边
right--;
}
}
arr[left] = temp;//把枢轴放在正确的位置
quickSort(arr,low,left-1);//通过递归最终排序完成
quickSort(arr,left+1,high);
}
}
/*
*选择排序
*内循环就结束一次,最值出现头角标位置
*/
public static void selectSort(int[] arr)
{
for (int x=0; x<arr.length-1; x++)
{
for (int y=x+1; y<arr.length; y++)
{
if (arr[x]>arr[y])
swap(arr,x,y);
}
}
}
/*
* 冒泡排序:相邻的两个元素进行比较,如果符合条件就换位
* 内循环一次,最值出现在尾角标的位置
* */
public static void bubbleSort(int[] arr)
{
for (int x=0; x<arr.length-1; x++)
{
for (int y=0; y<arr.length-x-1; y++)//-x是为了让每一次比较的元素减少,-1是为了防止角标越界
{
if (arr[y]>arr[y+1])
swap(arr,y,y+1);
}
}
}
//为选择排序和冒泡排序定义一个交换数组中元素的方法
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
}