是对气泡排序的一种改进,排序速度较快

  1. int[] array = new int[10];
  2. //生成随机数对象
  3. Random random = new Random();
  4. for (int i = 0; i < array.length; i++) {
  5. array[i] = random.nextInt(50);
  6. System.out.print(array[i]+" ");
  7. }
  8. System.out.println("\n排序后:");
  9. quickSort(array,0,array.length-1);
  10. }
  11. private static void quickSort(int[] array, int lowIndex
  12. int hightIndex) {
  13. //记录最小索引
  14. int low = lowIndex;
  15. //记录最大索引
  16. int hight = hightIndex;
  17. //记录分界点元素
  18. int middle;
  19. if (hightIndex>lowIndex) {
  20. //确定中间分界点元素值
  21. middle = array[(lowIndex+hightIndex)/2];
  22. while(low<=hight){
  23. while ((low<hightIndex)&&(array[low])<middle) {
  24. //确定不大于分界元素值的最小索引
  25. ++low;
  26. }
  27. while ((hight>lowIndex)&&(array[hight])>middle) {
  28. //确定大于分界元素值的最大索引
  29. --hight;
  30. }
  31. //如果最大索引与最小索引没有重叠
  32. if (low<=hight) {
  33. //交换两个索引的元素
  34. swap(array,low,hight);
  35. //递增最小索引
  36. ++low;
  37. //递减最大索引
  38. --hight;
  39. }
  40. }
  41. //递归排序未分界元素
  42. if (lowIndex<hight) {
  43. quickSort(array, lowIndex, hight);
  44. }
  45. if (low<hightIndex) {
  46. quickSort(array, low, hightIndex);
  47. }
  48. }
  49. }
  50. private static void swap(int[] array, int low, int hight) {
  51. //交换数组元素
  52. int temp = array[low];
  53. array[low] = array[hight];
  54. array[hight] = temp;
  55. //输出
  56. for (int i = 0; i < array.length; i++) {
  57. System.out.print(array[i]+"\t");
  58. }
  59. System.out.println();
  60. }

//快速排序算法原理:

通过一趟排序将要排序的数据分割成两个独立的两部分,其中一部分的数据都比另一部分的数据要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序可以递归进行,依此使整个数据变成有序序列。


例如:

假设要排序的是A[1]···A[N],首选选取任意一个数据(通常选用第一个元素)作为关键数据,然后将所有比它小的数放到它前面,比它大的放在后面,这个过程称为一趟快速排序,递归调用此过程,即可实现数组的快速排序。

如图所示

wKioL1jJOfCCuPWAAABBm60nn5o729.jpg-wh_50