在插入排序希爾排序選擇排序快速排序堆排序歸併排序中

2021-03-04 01:58:36 字數 5872 閱讀 6401

1樓:匿名使用者

在插入排序、希爾排序、選擇排序、快速排序、堆排排序、歸併排序和基數排序中,平均比較次數最少的排序是快速排序,需要記憶體容量最多的是基數排序。

時間複雜度

時間複雜度為 o(nlogn):

快速排序、堆排序和歸併排序

時間複雜度為 o(n2):

直接插入排序、起泡排序和

簡單選擇排序

時間複雜度為 o(n):

基數排序

2樓:匿名使用者

當然是插入了 軟設考過

比較直接插入排序,簡單選擇排序,快速排序,堆排序,歸併排序,希爾排序和基數排序的時空效能穩定性和情

3樓:寶石鯊魚

堆排序 n*logn 時間在這裡比較優 不過穩定性差快排 o(nlogn),最壞情況為o(n^2)。在實際應用中,快速排序的平均時間複雜度為o(nlogn)。

比較均衡

直接插入排序,簡單選擇排序 n^2

希爾排序和基數排序 不太了解

空間的話 個人認為是一樣的 因為你要用同樣的陣列去存 只是存的順序不同罷了

時間的話 100w以內 快排 最優 100w以上 堆排的優越性就明顯出來了

所以一般快排就可以滿足

利用插入排序,希爾排序,起泡排序,快速排序,選擇排序,堆排序,歸併排序排序方法排序30000個隨機整數

4樓:智慧型的默默

#include"stdio.h"

#include "stdlib.h"

#include

#include

#include"time.h"

#include

using namespace std;

void insertsort(int* pdataarray, int idatanum)

pdataarray[k] = temp; //插入

} }

} //交換data1和data2所指向的整形

void dataswap(int* data1, int* data2)

*函式名稱:selectionsort

*引數說明:pdataarray 無序陣列;

* idatanum為無序資料個數

*說明: 選擇排序

void selectionsort(int* pdataarray, int idatanum)

}*函式名稱:shellinsert

*引數說明:pdataarray 無序陣列;

* d 增量大小

* idatanum為無序資料個數

*說明: 希爾按增量d的插入排序

void shellinsert(int* pdataarray, int d, int idatanum)

if (j != i - d) //存在比其小的數

pdataarray[j+d] = temp;

} }

*函式名稱:shellsort

*引數說明:pdataarray 無序陣列;

* idatanum為無序資料個數

*說明: 希爾排序

void shellsort(int* pdataarray, int idatanum)

}*函式名稱:bubblesort

*引數說明:pdataarray 無序陣列;

* idatanum為無序資料個數

*說明: 氣泡排序

void bubblesort(int* pdataarray, int idatanum)

int partions(int l,int low,int high)

if(rchild<=size&&a[rchild]>a[max])

if(max!=i)

}}void buildheap(int *a,int size) //建立堆

}void heapsort(int *a,int size) //堆排序

} void mergearray(int a, int first, int mid, int last, int temp)

while (i <= m)

temp[k++] = a[i++];

while (j <= n)

temp[k++] = a[j++];

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

a[first + i] = temp[i];

} void mergesort(int a, int first, int last, int temp)

}bool mergesort(int a, int n)

int main(int argc, char* argv)

insertsort(aa,30000);

double e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("插入排序%.10f seconds\n",e);

selectionsort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("選擇排序%.10f seconds\n",e);

shellsort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("希爾排序%.10f seconds\n",e);

bubblesort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("起泡排序%.10f seconds\n",e);

quicksort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("快速排序%.10f seconds\n",e);

heapsort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("堆排序%.10f seconds\n",e);

mergesort(aa,30000);

e=(double)(end.quadpart-start.quadpart)/ (double)freq.quadpart;

printf("歸併排序%.10f seconds\n",e);

return 0;

} 我弄了很久才出來,請採納吧!拜託了!

還有若是結果中停止程式,是因為你的資料太多太大,只要重新執行一遍就可以了!

直接插入排序、二分法插入排序、希爾排序、直接選擇排序、堆排序、交換排序、快速排序英文怎麼說?

5樓:聽不清啊

直接插入排序:straight insertion sort二分法插入排序: binary sort

希爾排序:shell sort

直接選擇排序:straight select sort堆排序:heap sort

交換排序:swap sort

快速排序:quick sort

基數排序:radix sort

歸併排序:merge sort

6樓:匿名使用者

straightinsertion、binarysort、shellsort、******selectionsort、

quicksort

資料結構:對直接插入排序、折半插入排序、希爾排序、氣泡排序、快速排序、簡單選擇排序、堆排序、歸併排序

7樓:匿名使用者

這個問題太大了,還要**,除非機器裡有現成的,否則,你這個問法。。。。確實。。。。

在快速排序、堆排序、歸併排序中,什麼排序是穩定的?

8樓:沉珂側畔

歸併排序是穩定的「快速排序和堆排序都不穩定.不穩定:就是大小相同的兩個數,經過排序後,最終位置與初始位置交換了。

快速排序:

27 23 27 3

以第乙個27作為pivot中心點,則27與後面那個3交換,形成

3 23 27 27,排序經過一次結束,但最後那個27在排序之初先於初始位置3那個27,所以不穩定。

堆排序:

比如:3 27 36 27,

如果堆頂3先輸出,則,第三層的27(最後乙個27)跑到堆頂,然後堆穩定,繼續輸出堆頂,是剛才那個27,這樣說明後面的27先於第二個位置的27輸出,不穩定。」

「2 歸併排序(mergesort)

歸併排序先分解要排序的序列,從1分成2,2分成4,依次分解,當分解到只有1個一組的時候,就可以排序這些分組,然後依次合併回原來的序列中,這樣就可以排序所有資料。合併排序比堆排序稍微快一點,但是需要比堆排序多一倍的記憶體空間,因為它需要乙個額外的陣列。」

以ai與aj為例子

快速排序有兩個方向,左邊的i下標一直往右走,當a[i] <= a[center_index],其中center_index樞元素的陣列下標,一般取為陣列第0個元素。而右邊的j下標一直往左走,當a[j] > a[center_indexij都走不動了,i <= j, 交換a[i]和a[j],重複上面的過程,直到i>j。

交換a[j]和a[center_index],完成一趟快速排序。在中樞元素和a[j]交換的時候,很有可能把前面的元素的穩定性打亂,比如序列5 3 3 4 3 8 9 10 11,現在中樞元素5和3(第5個元素,下標從1開始計)交換就會把元素3的穩定性打亂,所以快速排序是乙個不穩定的排序演算法,不穩定發生在中樞元素和a[j]交換的時刻。

寫出氣泡排序選擇排序插入排序歸併排序快速排序在最壞最壞及平均情況下的時間複雜度

氣泡排序,選擇排序,插入排序一般情況下要經過兩次迴圈,每次迴圈必須經歷時則需要o n 2 而歸併排序,快速排序則是o n log2 n 而最壞情況下,快速排序會變成o n 2 其餘不變 優化除外 望採納!以下排序演算法最壞情況下時間複雜度最低的是 a.氣泡排序 b.插入 c.選擇 d.快排 在氣泡排...

寫排序的幾種演算法,簡單選擇排序,直接插入排序,氣泡排序,詳細點

樓主留郵箱吧,我給你發過去 插入 void insert sort int a,int n 冒泡 int bubble sort int a,int n 選擇 int select sort int a,int n tmp min a min i a i a i tmp 選擇排序演算法與氣泡排序演算...

大家幫看一下,希爾排序問題,資料結構希爾排序問題,求指點!

參考一下下邊的算來法吧,源希望能幫到你 void shellsort record r int n 希爾排序問題 70 是49上面有一橫。這是因為有兩個49。加一橫是為了區分它們。希爾排序的問題 shell 排序每一趟的增量序列都不知道,如何知道每一趟排序後的結果?資料結構希爾排序問題,求指點!wh...