是对气泡排序的一种改进,排序速度较快
- int[] array = new int[10];
- //生成随机数对象
- Random random = new Random();
- for (int i = 0; i < array.length; i++) {
- array[i] = random.nextInt(50);
- System.out.print(array[i]+" ");
- }
- System.out.println("\n排序后:");
- quickSort(array,0,array.length-1);
- }
-
- private static void quickSort(int[] array, int lowIndex
- , int hightIndex) {
- //记录最小索引
- int low = lowIndex;
- //记录最大索引
- int hight = hightIndex;
- //记录分界点元素
- int middle;
- if (hightIndex>lowIndex) {
- //确定中间分界点元素值
- middle = array[(lowIndex+hightIndex)/2];
- while(low<=hight){
- while ((low<hightIndex)&&(array[low])<middle) {
- //确定不大于分界元素值的最小索引
- ++low;
- }
- while ((hight>lowIndex)&&(array[hight])>middle) {
- //确定大于分界元素值的最大索引
- --hight;
- }
- //如果最大索引与最小索引没有重叠
- if (low<=hight) {
- //交换两个索引的元素
- swap(array,low,hight);
- //递增最小索引
- ++low;
- //递减最大索引
- --hight;
- }
- }
- //递归排序未分界元素
- if (lowIndex<hight) {
- quickSort(array, lowIndex, hight);
- }
- if (low<hightIndex) {
- quickSort(array, low, hightIndex);
- }
- }
- }
-
- private static void swap(int[] array, int low, int hight) {
- //交换数组元素
- int temp = array[low];
- array[low] = array[hight];
- array[hight] = temp;
- //输出
- for (int i = 0; i < array.length; i++) {
- System.out.print(array[i]+"\t");
- }
- System.out.println();
- }
//快速排序算法原理:
通过一趟排序将要排序的数据分割成两个独立的两部分,其中一部分的数据都比另一部分的数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序可以递归进行,依此使整个数据变成有序序列。
例如:
假设要排序的是A[1]···A[N],首选选取任意一个数据(通常选用第一个元素)作为关键数据,然后将所有比它小的数放到它前面,比它大的放在后面,这个过程称为一趟快速排序,递归调用此过程,即可实现数组的快速排序。
如图所示