快速排序的原理:選擇一個關鍵值作爲基準值。比基準值小的都在左邊序列(一般是無序的),比基準值大的都在右邊(一般是無序的)。一般選擇序列的第一個元素。
一次循環:從後往前比較,用基準值和最後一個值比較,如果比基準值小的交換位置,如果沒有繼續比較下一個,直到找到第一個比基準值小的值才交換。找到這個值之後,又從前往後開始比較,如果有比基準值大的,交換位置,如果沒有繼續比較下一個,直到找到第一個比基準值大的值才交換。直到從前往後的比較索引>從後往前比較的索引,結束第一次循環,此時,對於基準值來說,左右兩邊就是有序的了。
接着分別比較左右兩邊的序列,重複上述的循環。
public class maopapSort {
//關鍵值的位置一直在變化,在array[start]和array[end]來回交換
public static void quickSort(int left,int right,int [] array)
{
int start=left;
int end=right;
int key=array[start];
//關鍵值的位置一直在變化,在array[start]和array[end]來回交換
while(start<end)
{
//從後往前比較
//如果沒有比關鍵值小的,比較下一個,直到有比關鍵值小的交換位置,然後又從前往後比較
while(end>start&&array[end]>key)
end--;
if(array[end]<key)
{
int num=array[end];
array[end]=array[start];
array[start]=num;
}
//從前往後比較
//如果沒有比關鍵值大的,比較下一個,直到有比關鍵值大的交換位置
while(end>start&&array[start]<key)
start++;
if(array[start]>key)
{
int num=array[end];
array[end]=array[start];
array[start]=num;
}
}
//遞歸
if(start>left) quickSort(left,start-1,array);
if(end<right) quickSort(end+1,right,array);
}
public static void main(String[] args) {
int [] arr={9,8,7,6,5,4,3,2,1,0};
//funtion(arr);
quickSort(0,arr.length-1,arr);
for(int i:arr)
{
System.out.println(i);
}
}
}