資料結構課程設計原始碼 綜合排序

2021-08-20 09:52:10 字數 2452 閱讀 7687

標頭檔案:

#include //1插入類的排序: 

//希爾排序:取增量d1的分為一組,共分成d1組分別進行插入排序,然後每組對應元素放在一起,然後取d2...知道d=1

//希爾排序的**可以近乎看成把1換成dk

/*我們簡單處理增量序列:增量序列d = n為要排序數的個數

即:先將要排序的一組記錄按某個增量d(n/2,n為要排序數的個數)分成若干組子串行,每組中記錄的下標相差d.對每組中全部

元素進行直接插入排序,然後再用乙個較小的增量(d/2)對它進行分組,在每組中再進行直接插入排序。繼續不斷縮小增量直至

為1,最後使用直接插入排序完成排序。*/

//時間複雜度 o(n^3/2) 不穩定

void shellsort(int a, int n)

} }

} //直接插入排序:將第乙個資料看成有序表,將後面的資料一次插入表中

//時間複雜度 o(n^2) 穩定

void insertsort(int a, int n)

}} //2歸併類排序:

/*歸併(merge)排序法是將兩個(或兩個以上)有序表合併成乙個新的有序表,

即把待排序序列分為若干個子串行,每個子串行是有序的。

然後再把有序子串行合併為整體有序序列。*/

//時間複雜度 o(nlogn) 穩定

//合併兩個已經排好順序的陣列

void merge(int a, int start, int mid, int end, int *temp)

//用分治法進行二路歸併

void mergesort(int a, int start, int end, int *temp)

} //3交換類排序:

//快速排序

//時間複雜度 o(nlogn) 不穩定

void quicksort(int a, int n)

quicksort(a, low); //第乙個遞迴呼叫處理陣列的前部分,a對應的是陣列的首位址,low是指對應的元素個數

quicksort(a+low, n-low);//第二個遞迴呼叫處理陣列後部分,a + low指的當然是首位址加偏移位址,n-low就是p後面剩下的元素個數

} //氣泡排序

//時間複雜度 o(n^2) 穩定

void bubblesort(int a, int n)

} //4選擇類排序:

/*堆排序:初始時把要排序的n個數的序列看作是一棵順序儲存的二叉樹(一維陣列儲存二叉樹),

調整它們的儲存序,使之成為乙個堆,將堆頂元素輸出,

得到n 個元素中最大(或最小)的元素,這時堆的根節點的數最大(或者最小)。

然後對前面(n-1)個元素重新調整使之成為堆,輸出堆頂元素,得到n 個元素中次小(或次大)的元素。

依此類推,直到只有兩個節點的堆,並對它們作交換,最後得到有n個節點的有序序列*/

//堆排序:樹形選擇排序,將帶排序記錄看成完整的二叉樹,第一步:建立初堆,第二步:調整堆

//時間複雜度 o(nlogn) 不穩定

//第二步:調整堆

void heapadjust(int a, int s, int n)

a[s] = rc;

} //第一步:建初堆

void creatheap(int a, int n)

//整合

void heapsort(int a, int n)

} //簡單選擇排序:遍歷一次找到最小與第乙個元素互換位置,再從第二個元素開始遍歷找到最小與第二個元素互換位置...

//時間複雜度 o(n^2) 穩定

void selectsort(int a, int n)

}}

主函式:
#include #include#include "sort.h" 

#define max 101

using namespace std;

int main()

if(num == 0); //臨時陣列,作為引數傳遞,避免每次在merge中分配臨時陣列

mergesort(a, 1, max-1, temp);

cout << "排序後:" << endl;

for(int i = 1; i <= max-1; i++)

cout << left << setw(6) << a[i];

cout << endl << endl;

} if(num == 1)

if(num == 2)

if(num == 3)

if(num == 4)

if(num == 5)

if(num == 6)

if(num == 7)

} return 0;

}

資料結構課程設計

資料結構課程設計 include define n 30 include include includeusing namespace std struct node typedef node phone,mingzi node hashnumble node hashname int hash1 ...

資料結構課程設計

小明是乙個計算機專業top student 祝賀他畢業了。並準備到銀行參加工作。上班第一天,經理叫他編制乙個實現乙個活期儲蓄處理程式,算作考查。上班第一天,一定要給領導乙個好印象,小明二話沒說,就答應了。現要你是小明了,請完成如下題目功能。儲戶開戶 銷戶 存入 支出活動頻繁,系統設計要求 1 能比較...

資料結構課程設計

一 實訓目的 通過課程設計,學會運用資料結構知識,針對具體應用,自己設計合理資料結構,確定儲存結構,並能設計具體操作演算法,選擇使用具體語言進行實現。掌握c 較複雜程式的組織和設計過程,除錯技巧。學習解決實際問題的能力。題目1.小明是乙個計算機專業top student,祝賀他畢業了。並準備到銀行參...