快速排序的思想:用分治的策略,將陣列分的越來越小,再每組中來比較陣列元素之間的大小
快速排序的實現方式:
1.分別設定兩個指標來指向陣列的首元素和尾元素
2.一般將陣列的首元素來作為乙個樞紐元素(也就是其他的元素需要跟這個元素來比較大小,比這個元素大的需要放在它的右邊,比它小的需要放在這個元素的左邊)
3.採用遞迴的思想來實現上述兩步。
快速排序的實現**:
public class fastsort//跳出來說明higha[low] = a[high];
//從前向後掃瞄的條件
while(low;
} //跳出來說明low》high||a[low]>temp;
a[high] = a[low];
//將temp歸為
a[low] = temp;
} //跳出來說明low和high相同
return low;
} public static void
sort(int a,int low,int high)
int position = position(a,low,high);
//進行遞迴
sort(a,low,position-1);
sort(a,position+1
,high);
} public static void
main(string args) ;
fastsort.sort(a,
0, a.length-1);
for(int s : a)
}}
程式中不需要每次都將樞紐元素放在陣列中,只需要每趟遍歷結束後,
放在low=high的位置就好了
解釋下a[low] = a[high]或者a[high] = a[low]的意思說明一下:因為其實快速排序每次的交換是需要樞紐元素和被交換元素之間交換位置的,所以我們也就需要知道樞紐每次被交換的位置,但其實我們在程式中並沒有在每次交換都將樞紐元素放在相應的位置,而是在每趟結束之後,在交換。所以解釋如下:
1.low指標和high指標 在最開始都是指向陣列頭和陣列尾的,樞紐元素在low指標所指向的位置。
2.若a【high】< 樞紐 ,此時a[low]所代表的位址空間是指向樞紐的,a【low】 = a【high】是將小於樞紐的元素移到了相應的位置,注意此時我們並沒有交換樞紐的位置,按照交換規則我們知道樞紐應該放在a【high】的位置,這樣樞紐就和被交換元素之間交換了位置。
3.通過第二部分析我們知道,其實樞紐每次需要交換的位置就是a[low]或者a[high]的位置。
希望我的思路可以幫助大家理解,因為我在學習快排的時候就不懂這裡,所以分享出來幫助不懂的人來理解。有不正確的地方請大家指正!
Java排序演算法之快速排序
首先在陣列中選擇乙個基準點 該基準點的選取可能影響快速排序的效率,後面講解選取的方法 然後分別從陣列的兩端掃瞄陣列,設兩個指示標誌 lo指向起始位置,hi指向末尾 首先從後半部分開始,如果發現有元素比該基準點的值小,就交換lo和hi位置的值,然後從前半部分開始掃秒,發現有元素大於基準點的值,就交換l...
Java排序演算法之快速排序
基本思想 在資料序列中選擇乙個值作為比較的基準值,每趟從資料序列的兩端開始交替進行,將小於基準值的元素交換到序列前端,將大於基準值的元素交換到序列後端,介於兩者之間的位置則成為基準值的最終位置,直到子串行長度為1,完成排序 以序列,進行快速排序,以下是一趟快速排序過程示意圖 private stat...
Java排序演算法之快速排序
快速排序是將分治法運用到排序問題中的乙個典型例子,快速排序的基本思想是 通過 乙個樞軸 pivot 元素將 n 個元素的序列分為左 右兩個子串行 ll 和 lr,其中子串行 ll中的元素均比樞軸元素小,而子串行 lr 中的元素均比樞軸元素大,然後對左 右子串行分別進行快速排序,在將左 右子串行排好序...