快速排序与选择排序
一,快速排序

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
1. 算法步骤
1. 从数列中挑出一个元素,称为 "基准"(pivot);
2. 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

2.代码实现
|
/** * arr 排序数组 * left 开始坐标 * right 结束坐标 */ public static void quicksort(int[] arr, int left, int right) { //设置关键数据key为要排序数组的第一个元素 int key=arr[left]; //设置数组坐标的索引,往右移动判断比key大的数 int i= left; //设置数组右边的索引,往左移动判断比key小的数 int j=right; //如果左边索引比右边索引小,则还有数据没有排序 while(i<j){ while(arr[j]>key && j>left){ j--; } while(arr[i]<key && i<right){ i++;
党政政务长标题
} if(i<j){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } //如果左边索引比右边大,说明第一次排序完成将arr[j]与key对换, //保持了key左边的数比key小,key右边的数比key大 if(i>j){ int temp=arr[j]; arr[j]=arr[left]; arr[left]=temp; } //递归调用 if(j>left && j<right){ quicksort(arr,left,j-1); quicksort(arr,j+1,right); } } }
|
结果:

二.选择排序
选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

1. 算法步骤
第一次从下标为0的开始下标为0的这个数与后面的n-1个进行比较;找出最小或者最大的放在下标为0的这个位置;第二次从下标为1的开始比较;查询剩下的最大或者最小值;放在 下标为1的位置;以此类推;直到排序完成。

2.代码实现
/** * 选择排序 * 每一趟从待排序的数据元素中选出最小(或最大)的一个元素, * 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 * 选择排序是不稳定的排序方法。 * @author liangge **/ public class selectSort { public static void main(String[] args) { Random random =new Random(); //定义数组长度 int sort[]=new int[10]; for(int i=0;i<10;i++){ sort[i]=random.nextInt(20); } System.out.println("排序前数组为:"); for(int i:sort){ System.out.print(i+","); } selectionSort(sort); System.out.println(); System.out.println("排序后的数组为:"); for(int i:sort){ System.out.print(i+","); } } private static void selectionSort(int[] sort) { for(int i=0;i<sort.length-1;i++){ for(int j=i+1;j<sort.length;j++){ if(sort[i]>sort[j]){ int temp=sort[i]; sort[i]=sort[j]; sort[j]=temp; } } } } }
|
结果:
