快速排序(Quicksort)是对冒泡排序的一种改进。
1、基本思想
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以 递归进行,以此达到整个数据变成有序序列。
2、算法描述
快速排序使用分治策略来把一个序列( list )分为两个子序列(sub-lists)。步骤为:
①.从数列中挑出一个元素,称为基准(pivot)。
②.重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准后面(相同的数可以到任一边)。在这个分区结束之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
③. 递归地(recursively)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归到最底部时,数列的大小是0或1,也就是已经排序好了。这个算法一定会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
3、代码实现
public classQuicklySort {public static voidmain(String[] args) {
Long startTime=System.currentTimeMillis();//int[] array = new int[]{10, 1, 9, 2, 8, 3, 7, 4, 6, 5};
int[] array = new int[100000];for (int i = 0; i < 100000; i++) {
array[i]= (int) (Math.random() * 100000);
}
quicklySort(array,0, array.length - 1);
Long endTime=System.currentTimeMillis();
System.out.println(endTime-startTime);
}public static void quicklySort(int[] array, int low, inthigh) {if (null == array || array.length <= 0) {return;
}if (low >=high )
{return;
}int left =low;int right =high;int key =array[left];while (left
while (left < right && array[right] >=key) {
right--;
}while (left < right && array[left] <=key) {
left++;
}if (left
swap(array, left, right);
}
}
swap(array, low, left);//System.out.println(Arrays.toString(array));
quicklySort(array, low, left - 1);
quicklySort(array, left+ 1, high);
}private static void swap(int array[], int low, inthigh) {int tmp =array[low];
array[low]=array[high];
array[high]=tmp;
}
}
View Code