一般我們在對資料進行排序時都採用氣泡排序法,然而氣泡排序演算法中在對資料進行遍歷一遍時,只能排序乙個資料到正確的位置上去,其演算法的時間複雜度為o(n^2),該演算法的效率比較低,而快速排序演算法是在氣泡排序的基礎上提出的快速排序由c. a. r. hoare在2023年提出。它的基本思想是:
1、在一組比較的資料中取乙個數為基準數。
2、通過對基準數與其它資料比較,將大於基準數的資料放到基準數的右邊,反之小於基準數的資料放到左邊。
3、然後在以基準數為界限的兩部分資料進行遞迴,依次使整個資料變成有序序列。
其中這種快速排序的思想可以看成:挖坑填數+分治法。
挖坑填數法如圖所示:
首先選定陣列第乙個資料作為基準值。將其儲存在temp變數中,在此處挖坑等待小於基準值的資料填入,然後開始第一步重右向左比較哪個資料小於基準值,則將該數填入到該坑出,第二步因為第一次重右找到小於基準值使資料43,且上次又在該處挖坑,因此接下來應該重左向右找大於該基準值的數,放入到該坑處,如下圖所示。
當所有資料比較完後,則資料會排序成以基準值為中心,左邊都是小於基準值的資料,右邊都是大於基準值的資料。如下圖所示
2、分治法:就是在將原陣列的長度以基準值為界限劃分為2個無序陣列,在對這兩個陣列重新排序重複以上過程,最後都使整個陣列都變成有序排列。
void
quick_sort
(int
* arr,
int begin,
int end)
if(i < j)
while
(i < j&&arr[i]
< temp)
if(i < j)
} arr[i]
= temp;
quick_sort
(arr, begin, i -1)
;quick_sort
(arr, i +
1, end);}
else
return;}
intmain()
;int i =0;
int len =
sizeof
(arr)
/sizeof
(arr[0]
)-1;
for(i =
0; i <
10; i++
)printf
("\n");
quick_sort
(arr,
0,len)
;for
(i =
0; i <
10; i++
)return0;
}
快速排序 轉 快速排序的實現
總的說來,要直接默寫出快速排序還是有一定難度的,因為本人就自己的理解對快速排序作了下白話解釋,希望對大家理解有幫助,達到快速排序,快速搞定。快速排序是c.r.a.hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod ...
快速排序的實現
先寫 一會再總結 public class testquicksort for int x array system.out.println quicksort array,0,array.length 1 for int x array 對分割元素左右段陣列進行遞迴快排,直到左右陣列只剩下1個元素...
快速排序的實現
快速排序是一種常用的排序演算法,其時間複雜度是o nlogn c 自帶快排函式sort 其實現和這裡的快排類似但又不完全相同 快速排序演算法思想 先在待排序的陣列a中任意找乙個資料x,最好取中間的數a l r 2 其中l是最小下標,r是最大下標。找到這個資料後再採用雙指標 其實是兩個用來標記陣列下標...