各種排序演算法再分析

2021-08-02 10:15:20 字數 2499 閱讀 4860

了解各種排序演算法的時間和空間複雜度,程式設計或呼叫庫函式實現各種排序(至少5種)。將各種排序方法用各種資料進行測試。資料報括大規模資料(500000-1000000),小規模資料,最好資料,最壞資料,給定資料,隨機資料。對基於比較的排序跟蹤比較和交換次數。根據測試結果,對排序演算法進行分析時空複雜度以及穩定性分析。
實現了插入排序(直接插入排序、希爾排序)、交換排序(氣泡排序、快速排序)、選擇排序(直接選擇排序)、歸併排序共6種排序演算法。
在該設計中最壞資料為50個元素的遞減序列,最好資料為50個元素的遞增序列,小規模資料由隨機生成10個元素,大規模資料由隨機生成500000個元素,隨機資料由隨機生成50元素。

1.直接插入排序各類資料測試結果如下:

資料比較次數

交換次數

最壞資料(50)

1274

1274

最好資料(50)

4949

小規模資料(10)

3535

大規模資料(500000)

62544953357

62544953357

隨機資料(50)

706706

2. 希爾排序各類資料測試結果如下:

資料比較次數

交換次數

最壞資料

308308

最好資料

203203

小規模資料(10)

3535

大規模資料(500000)

28248913

28248913

隨機資料

346346

3. 氣泡排序各類資料測試結果如下:

資料比較次數

交換次數

最壞資料

1225

1225

最好資料

1225

0小規模資料(10)

4521

大規模資料(500000)

124999750000

187538241828

隨機資料

1225

644

4. 快速排序

資料比較次數

交換次數

最壞資料:

1225

147最好資料

1225

147小規模資料(10)

2124

大規模資料(500000)

13321628

4509311

隨機資料:

256168

5. 直接選擇排序

資料比較次數

交換次數

最壞資料

1225

75最好資料

1225

0小規模資料(10)

4521

大規模資料(500000)

124999750000

1499910

隨機資料:

1225

135

6. 二路歸併排序

資料比較次數

交換次數

最壞資料

133592

最好資料

161592

小規模資料(10)

2176

大規模資料(500000)

8858700

18980608

隨機資料

234592

void insertsort(rectype r,int n)//直接插入排序

r[j+1]=tmp;//插入

}}void shellsort(rectype r,int n)//希爾排序

}void bubblesort(rectype r,int n)//氣泡排序}}

}void quicksort(rectype r,int s,int t)

r[i]=r[j];//交換

m++;

while(i//從左向右掃瞄,找大於tmp.key的r[i]

r[j]=r[i];//交換

}r[i]=tmp;

quicksort(r,s,i-1);//對左區間遞迴排序

quicksort(r,i+1,t);//對右區間遞迴排序

}}void selectsort(rectype r,int n)//直接選擇排序

}}void merge(rectype r,int low,int mid,int high)//兩有序表直接歸併為乙個有序表

else

}while(i<=mid)//第一段餘下部分放入r1

while(j<=high)//第二段餘下部分放入r1

for(k=0,i=low;i<=high;k++,i++)//r1複製到r

free(r1);

}void mergepass(rectype r,int

length,int n)//對整表進行一趟排序

void mergesort(rectype r,int n)//自底向上的二路歸併排序演算法

各種排序演算法分析總結

排序演算法 1 分類 1 插入排序 直接插入排序 希爾排序 2 交換排序 氣泡排序 快速排序 3 選擇排序 直接選擇排序 堆排序 4 歸併排序 5 分配排序 箱排序 基數排序 所需輔助空間最多 歸併排序 所需輔助空間最少 堆排序 平均速度最快 快速排序 不穩定 快速排序,希爾排序,堆排序。1 選擇排...

各種排序演算法全分析

排序簡介 排序是資料處理中經常使用的一種重要運算,在計算機及其應用系統中,花費在排序上的時間在系統執行時間中占有很大比重 並且排序本身對推動演算法分析的發展也起很大作用。目前已有上百種排序方法,但尚未有乙個最理想的盡如人意的方法,本章介紹常用的如下排序方法,並對它們進行分析和比較。1 插入排序 直接...

各種排序演算法分析與比較

1.直接插入排序 每一趟將乙個待排序的元素作為關鍵字,按照其關鍵字的大小插入到已經排好的部分序列的適當位置上。平均時間複雜度為o n2 空間複雜度為o 1 void insertsort int r,int n r j 1 temp 2.氣泡排序 平均時間複雜度為o n2 空間複雜度為o 1 voi...