快速排序的實現

2021-10-20 10:37:57 字數 1517 閱讀 4207

一般我們在對資料進行排序時都採用氣泡排序法,然而氣泡排序演算法中在對資料進行遍歷一遍時,只能排序乙個資料到正確的位置上去,其演算法的時間複雜度為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是最大下標。找到這個資料後再採用雙指標 其實是兩個用來標記陣列下標...