java快速排序

2021-08-27 07:47:12 字數 2014 閱讀 3240

[size=medium]先簡單說一下快速排序的原理(思路):

1、給定乙個陣列,選取其中乙個元素作為樞紐元(pivot)通常為陣列最中間的那個元素;

2、由樞紐元(pivot)將陣列分為不相交的2個集合,s1和s2;

3、從s1的第乙個元素開始和樞紐元(pivot)比較,找到第乙個大於樞紐元(pivot)的元素後停止;

4、從s2的最後乙個元素開始和樞紐元(pivot)比較,找到第乙個小於樞紐元(pivot)的元素後停止;

5、交換第3步和第4步找到的2個元素,遞迴此操作;

6、此時樞紐元(pivot)左邊集合s1都比樞紐元(pivot)小,右邊集合s2都比樞紐元(pivot)大,遞迴2、3、4、5步,直到所有元素有序。

例如:第1步:13、81、92、43、[color=red]65[/color]、31、57、26、75 選取樞紐元(pivot)65

第2步:s1(13、81、92、43)找到第乙個大於65的數[color=blue]81[/color],s2(31、57、26、75)找到第乙個小於65的數([color=red]從後往前找[/color])[color=blue]26[/color]

第3步:交換81和26的位置s1(13、26、92、43)s2(31、57、81、75)

第4步:遞迴操作,最後結果:s1(13、26、57、43、31)s2(92、81、75),此時陣列元素順序為:13、26、57、43、31、[color=red]65[/color]、92、81、75

第5步:分別遞迴操作s1和s2,最後結果:13、26、31、43、57、65、75、81、92[color=blue](有序陣列)[/color]

**如下:[/size]

/**

* 快速排序

* * @param nums

*/public static void quicksort(int nums)

private static void sort(int nums, int low, int high)

}private static int getpartition(int nums, int low, int high)

while (low < high && nums[low] < tmp)

if (low < high)

}return low;

}/**

* 交換元素

* * @param nums

* @param i

* @param j

*/private static void swap(int nums, int i, int j)

[size=large]執行測試,測試結果ok,是不是就沒問題了呢?採用隨機數組測試,發現只要陣列中有相同元素存在,就會導致沒有結果(死迴圈)!!why?

稍微修改一下[color=red]getpartition[/color]方法即可:在交換2個元素之前判斷一下是否相等[/size]

private static int getpartition(int nums, int low, int high)

while (low < high && nums[low] < tmp)

if (low < high)

swap(nums, low, high);}}

return low;

}

[size=large][color=blue]

ok,再接著測試,沒問題了。。。。

備註:可以單獨寫乙個檢查陣列是否有序的方法[/color][/size]

/**

* 檢查陣列是否有序

* * @param nums

* @return true:有序 false:無序

*/private static boolean checkissortnums(int nums)

else

}return flag;

}

java 快速排序

public class myquicksort while strvoid middle strvoid low lowif low hight else if hight middle temp strvoid hight strvoid hight strvoid low strvoid lo...

快速排序(java)

快速排序 public class quacksort int pivot arr low 取第乙個數作為中間數 左滑塊當前的下標數,從第二個數字開始,從最後乙個開始 int left low 1 int right high 右滑塊當前的下標數 while left right 從右邊開始找 wh...

快速排序(Java)

快速排序的思想是基於分治法加上遞迴思想,排序陣列時,將陣列分成兩個小部分,然後對它們遞迴排序,直到它們都不可再分為止。快速排序的平均執行時間是o nlog n 遠比插入排序的o n 2 時間小。快速排序 param arr param start param end return private s...