快速排序,是對氣泡排序的一種改進,用該方法對一組序列進行快速

2022-06-01 15:55:24 字數 3558 閱讀 5844

1樓:匿名使用者

// 快速排序

// 使用遞迴呼叫來實現快速排序

// 10/21/2007

// author: eman lee

/*quick sort */

#include

void quick_sort(int data, int low, int high)

data[i]=pivot; //樞軸記錄移到最終位置

quick_sort(data,low,i-1);

quick_sort(data,i+1,high);}}void main()

;for(i=0;i<9;i++)

printf("\n");

quick_sort(data, 0, 8);

for(i=0;i<9;i++)}

2樓:匿名使用者

void quick_sort(int a,int s,int e) a[i]=t; quick_sort(a,s,i-1); /*遞迴排序右子序列*/quick_sort(a,i+1,e); /*遞迴排序左子序列*/}} 快速排序的時間複雜度是o(n*㏒2n),是不穩定的排序

對序列1,2,3,4,5進行排序,用堆排序、快速排序、氣泡排序和歸併排序進行排序,分別需要進行幾趟排序

3樓:

1、插入排序

(直接插入排序和希爾排序)

2、選擇排序(直接選擇排序和堆排序)

3、交換排序(氣泡排序和快速排序)

4、歸併排序

5、基數排序

直接插入排序:逐個將後一個數加到前面的排好的序中。在直接插入排序過程中,對其中一個記錄的插入排序稱為一次排序;直接插入排序是從第二個記錄開始進行的,因此,長度為n的記錄序列需要進行n-1次排序才能完成整個序列的排序。

時間複雜度為o(n2)。

希爾排序:希爾排序又稱縮小增量排序,增量di可以有各種不同的取法,但最後一次排序時的增量必須為1,最簡單可取di+1=di/2(取小)。時間複雜度為o(n(log2n)2)。

直接選擇排序

說明:每次將後面的最小的找出來插入前面的已排好的序中。同理,具有n個記錄的序列要做n-1次排序。

時間複雜度為o(n2)。

氣泡排序:兩個兩個比較,將大的往後移。通過第一次氣泡排序,使得待排序的n個記錄中關鍵字最大的記錄排到了序列的最後一個位置上。

然後對序列中前n-1個記錄進行第二次氣泡排序。。。對於n個記錄的序列,共需進行n次氣泡排序。時間複雜度為o(n2)。

快速排序:又叫分割槽交換排序,是對氣泡排序方法的一種改進。時間複雜度為o(nlog2n)。

歸併排序:將兩個或兩個以上的有序資料序列合併成一個有序資料序列的過程。時間複雜度為o(nlog2n)。

編寫一個程式分別實現氣泡排序和快速排序演算法。要求:兩種排序演算法都不僅要輸出最終排序序列,還要輸出排

4樓:手機使用者

利用快速排序演算法,目前速度最快的就是這個演算法啦!

#include

#define swap(a,b)

void quick(int *a,int s,int t)while(i

swap(a[s],a[j]);

if(s

if(j+1

}void print(int *a,int n)int main()

完全滿足你的需求! 希望你對有用!

跪求資料結構快速排序法原理

5樓:賓士

看看這個吧,裡面講的十分詳細了已經。

---以上,希望對你有所幫助。

6樓:匿名使用者

有點像2分吧

有2個指標i,j分別從左往右掃,一開始i=1,j=9,以a[(i+j) div 2]為中間值mid去比較排序達到劃分為左右2部分(左邊最大數<=右邊最小數)。

第一次mid:=a[5],則mid=15

然後開始加i直到a[i]>=mid,減j到a[j]<=mid,也就是i,j指到了25,15,然後交換,則順序變為了15,84,21,47,15,27,68,35,24。然後繼續掃,i=2時因為15是最小的數了,所有j再往左掃到最後會為0(j指向a[0]),因為i>j所以就不再掃了。

然後就是1分為2分了,分為(1,j)跟(i,9)繼續排序

由於j=0所以(1,j)部分沒做,繼續做(2,9)部分排序,同理反覆操作,直到排序完成。

快排講起來不大好理解,自己可以拿張紙隨便寫幾個數模擬下,這樣就很清楚了,有什麼疑問直接給我發訊息吧

7樓:匿名使用者

資料結構快速排序法原理:快速排序是對氣泡排序的一種改進。它的基本思想是:

通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

25,84,21,47,15,27,68,35,24 快速排序方法:

有一組關鍵字序列(41,34,53,38,26,74),採用快速排序方法由大到小進行排序

8樓:匿名使用者

快速排序又稱分割槽交換排序,是對氣泡排序的改進,快速排序採用的思想是分治思想。。

演算法原理:

(1)從待排序的n個記錄中任意選取一個記錄(通常選取第一個記錄)為分割槽標準;

(2)把所有小於該排序列的記錄移動到左邊,把所有大於該排序碼的記錄移動到右邊,中間放所選記錄,稱之為第一趟排序;

(3)然後對前後兩個子序列分別重複上述過程,直到所有記錄都排好序。

穩定性:不穩定排序。

時間複雜度: o(nlog2n)至o(n2),平均時間複雜度為o(nlgn)。

最好的情況:是每趟排序結束後,每次劃分使兩個子檔案的長度大致相等,時間複雜度為o(nlog2n)。

最壞的情況:是待排序記錄已經排好序,第一趟經過n-1次比較後第一個記錄保持位置不變,並得到一個n-1個元素的子記錄;第二趟經過n-2次比較,將第二個記錄定位在原來的位置上,並得到一個包括n-2個記錄的子檔案,依次類推,這樣總的比較次數是:

cmax=∑i=1n−1(n−i)=n(n−1)/2=o(n2)

//a:待排序陣列,low:最低位的下標,high:最高位的下標

void quicksort(int a,int low, int high)

int left=low;

int right=high;

int key=a[left];    /*用陣列的第一個記錄作為分割槽元素*/

while(left!=right) 均小於 基準值(41);右邊部分 ,均大於基準值。這樣子我們就達到了分割序列的目標。

在接著對子序列用同樣的辦法進行分割,直至子序列不超過一個元素,那麼排序結束,整個序列處於有序狀態。

關於氣泡排序法的程式,氣泡排序法是如何排序的???

bubble中第2個for迴圈最後p 應為i 之誤。修改後程式為 include using namespace std void bubble int v,int size int main int len sizeof vn sizeof int for int i 0 iv i 1 列印語句挪...

對一組無序數進行遞增排序 使用氣泡排序和快速排序,比較它們的排序用時

氣泡排序 void bubblesort int data,size t size if ordered break void quicksort int data,size t left,size t right while j p data j pivot j if j p data p piv...

用氣泡排序法對字串排序,並按從小到大的順序輸出 需要用c語言來程式設計的

include stdio.h include string.h int main char p 10 tmp null int i,j for i 0 i 10 i p i co i printf 請輸入10個字串 n for i 0 i 10 i gets co i for i 0 i 9 i ...