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... 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 ...關於氣泡排序法的程式,氣泡排序法是如何排序的???
對一組無序數進行遞增排序 使用氣泡排序和快速排序,比較它們的排序用時
用氣泡排序法對字串排序,並按從小到大的順序輸出 需要用c語言來程式設計的