基本思想:快速排序使用分治的思想,通過一趟排序將待排序列分割成兩部分,其中一部分記錄的關鍵字均比另一部分記錄的關鍵字小。之後分別對這兩部分記錄繼續進行排序,以達到整個序列有序的目的。舉例來說:
數列:5,2,4,9,3,8,7,1,6,0
①選乙個基準,此處以第一位5位基準,然後將5與各個數相比較,比5大的數放在5的右邊(注意,此時右邊的數並不是一組有序的數,僅僅比5大而已),比5小的數放在5的左邊(與上相似)
②使用遞迴演算法,將5左邊的數與右邊的數分別單獨看成一組新的數列,再執行①的步驟思想;直至結束。
我的排序思想便是如此,但具體的執行,還需考慮:
根據①的思想衍生出**思路,先從右邊遍歷,再從左邊遍歷,即**中的while迴圈。再根據②的思想分割數列遞迴運算,直到排序完成。
**如下:
#include
#include
#include
/*快速排序*/
void
quicksort
(int
*ttr,
int left,
int right)
temp = ttr[left]
;//先記錄下 基準數,以便最後歸位
i = left;
j = right;
while
(i!=j)
while
(ttr[i]
<= temp && i//從左向右依次查詢
if(i < j)
//如果符合條件,交換兩數的位置,
} ttr[left]
= ttr[i]
; ttr[i]
= temp;
quicksort
(ttr,left,i-1)
;quicksort
(ttr,i+
1,right);}
//測試函式
intmain()
;int integer,i;
integer =
sizeof
(str1)
/sizeof
(int);
quicksort
(str1,
0,integer-1)
;for
(i =
0;i < integer;i++
)printf
("\n");
system
("pause");
return0;
}
交換排序之快速排序
1.基本思想 假設要排序的陣列是array 0 array n 1 首先任意選取乙個資料 通常選用第乙個資料 作為關鍵資料,然後將所有比它的數都放到它前面,所有比它大的數都放到它後面,這個過程稱為一趟快速排序。一趟快速排序的演算法是 1 設定兩個變數i j,排序開始的時候i 0,j n 1 2 以第...
交換排序之快速排序
問題及 檔名稱 main.cpp 作 者 徐群壯 完成日期 2015.12.15 版 本 號 v1.0 問題描述 資料結構例程 交換排序之快速排序 輸入描述 程式輸出 1.以第1個元素作為基準 include define maxsize 20 typedef int keytype 定義關鍵字型別...
交換排序之快速排序
快速排序的基本思路是選取乙個基準數,然後將小於基準數的移到基準數左邊,反之在右邊,稱為一趟快速排序。然後以基準數分為左右兩組,分別快速排序,如此遞迴,完成最終排序。一般基準數選取第乙個資料,接下來重點在於一趟排序中如何移動資料。如資料data data 0 4為基準,將4搬出,則data 0 乙個空...