快速排序的原理
選擇乙個關鍵值作為基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第乙個元素
一次迴圈:從後往前比較,用基準值和最後乙個值比較,如果比基準值小的交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值小的值才交換。找到這個值之後,又從前往後開始比較,如果有比基準值大的,交換位置,如果沒有繼續比較下乙個,直到找到第乙個比基準值大的值才交換。直到從前往後的比較索引》從後往前比較的索引,結束第一次迴圈,此時,對於基準值來說,左右兩邊就是有序的了。
package com.cn.test.quicksort;
public class quicksort ;
system.out.print("排序前:");
printarr(numbers);
quick(numbers);
system.out.print("快速排序後:");
printarr(numbers); }
//列印函式:
public static void printarr(int numbers) }
/***
* @param numbers 帶排序陣列
* @param low 開始位置
* @param high 結束位置
*/public static void quicksort(int numbers,int low,int high)
}/**
* 查詢出中軸(預設是最低位low)的在numbers陣列排序後所在位置
* * @param numbers 帶查詢陣列
* @param low 開始位置
* @param high 結束位置
* @return 中軸所在位置
*/public static int getmiddle(int numbers, int low,int high)
numbers[low] = numbers[high];//比中軸小的記錄移到低端
while(low < high && numbers[low] <= temp)
numbers[high] = numbers[low] ; //比中軸大的記錄移到高階
}numbers[low] = temp ; //中軸記錄到尾
return low ; // 返回中軸的位置
}}
輸出結果:
排序前:5,2,6,4,7,9,10,5,
快速排序後:2,4,5,5,6,7,9,10,
參考: 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...