快速排序實現

2021-09-23 01:38:54 字數 2850 閱讀 2744

快速排序的「快」是因為使用了「分治法」,使其時間複雜度降低到了(nlogn)

/**

* @author qucg

* @version 2019/5/19

* @description 快速排序,快速排序的「快」是因為使用了「分治法」

*/public class quicksort

// 得到基準元素位置

int pivotindex = partition(arr, startindex, endindex);

// 根據基準元素,分成兩部分進行遞迴排序

quicksort(arr, startindex, pivotindex - 1);

quicksort(arr, pivotindex + 1, endindex);

}/**

* 分治(雙邊迴圈法)

** @param arr 待交換的陣列

* @param startindex 起始下標

* @param endindex 結束下標

* @return 重疊的索引

*/private static int partition(int arr, int startindex, int endindex)

// left右移

while (left < right && arr[left] <= pivot)

// 交換left和right指標所指向的元素

if (left < right)

}// pivot和指標重合點交換

arr[startindex] = arr[left];

arr[left] = pivot;

return left;

}public static void main(string args) ;

quicksort(arr, 0,arr.length-1);

system.out.println(arrays.tostring(arr));

}}

/**

* @author qcg

* @version 2019/5/21.

* @description 單邊快速排序實現

* 確定兩個元素:

* 1.pivot基準

* 2.mark指標指向代表小於基準元素的邊界

* 基本思路:

* 1.每個陣列元素和基準值去比較

* 2.如果陣列元素小於基準元素:

* 2.1 mark++

* 2.2 將mark指向的元素與該陣列元素交換

* 3.以mark指向的元素為準,左右陣列分別重複第一步

*/public class singlesidequicksort

// 得到基準元素位置

int pivotindex = partition(arr, startindex, endindex);

// 根據基準元素,分成兩部分進行遞迴排序

quicksort(arr, startindex, pivotindex - 1);

quicksort(arr, pivotindex + 1, endindex);

}/**

* 分治(單邊迴圈法)

** @param arr 待交換的陣列

* @param startindex 起始下標

* @param endindex 結束下標

* @return 小於基準元素的邊界

*/private static int partition(int arr, int startindex, int endindex)

}// mark指向的元素和pivot交換

arr[startindex] = arr[mark];

arr[mark] = pivot;

return mark;

}// 第一輪排序:[1, 3, 2, 4, 4, 6, 8, 5]

public static void main(string args) ;

quicksort(arr, 0, arr.length - 1);

system.out.println(arrays.tostring(arr));

}}

/**

* @author qucg

* @version 2019/5/21

* @description 非遞迴實現的快速排序

*/public class nonrecursivequicksort

if (pivotindex + 1 < param.get("endindex")) }}

/*** 分治 (單邊迴圈法)

** @param arr 待交換的陣列

* @param startindex 起始下標

* @param endindex 結束下標

* @return 邊界

*/private static int partition(int arr, int startindex, int endindex)

}// 交換mark指向的元素與pivot

arr[startindex] = arr[mark];

arr[mark] = pivot;

return mark;

}public static void main(string args) ;

quicksort(arr,0,arr.length-1);

system.out.println(arrays.tostring(arr));

}}

因為其快的特點,常常用於大規模的資料排序場景

快速排序實現

1.結束條件 low high 2.快速排序要分而治之。故需要分的位置,位置便是當前元素經過排列後應該所在的位置。3.對於單次的排列,都使得乙個元素排在了正確的位置,她的左面比她小,右側比她大。package com.jue.quicksort public class quicksort logs...

實現 快速排序

快速排序的基本思想 1 先從數列中選擇乙個數作為基準數 一般會把陣列中最左邊的數當做基準數 2 然後從數列兩邊進行檢索 先從右邊檢索比基準數小的,再從左邊檢索比基準數大的 如果檢索到了,就停下,然後交換這兩個元素。然後再繼續檢索。3 直到左檢索和右檢索相遇,把基準數和相遇位置的數交換。4 第一輪檢索...

快速排序實現

快速排序的基本思想是 通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,從而使全部的資料有序。快排的平均時間複雜度是o nlogn 最壞是o n 2 1 public class ...