七種常見的排序演算法的C 實現

2021-07-30 06:32:06 字數 2547 閱讀 4513

因為幾個演算法使用了遞迴,這裡測試用的陣列大小又比較大,如果使用vs編譯的話,需要調整一下堆疊的大小,否則容易發生stackoverflow的錯誤。

**如下

#include"stdafx.h"

#include

#include

#include

using

namespace

std;

#define num 50000;

void bubblesort(int temp1, int length);

void insertsort(int temp2, int length);

void shellsort(int te***, int length);

void selectsort(int temp4, int length);

void mergesort(int temp5, int left, int right);

void quicksort(int temp6, int left, int right);

void heapsort(int temp7, int length);

void heaprebuild(int arr, int root, int size);

int main()

//氣泡排序

void bubblesort(int temp1, int length)}}

clock_t end = clock();

cout

<< "time taken by bubblesort:\t"

<< (double)(end - start) / clocks_per_sec << "seconds"

<< endl;

}//插入排序

void insertsort(int temp2, int length)//有陣列的地方需要考慮邊界

}if (j != i - 1)

(*(temp2 + k + 1)) = temp;}}

clock_t end = clock();

cout

<< "time taken by insertsort:\t"

<< (double)(end - start) / clocks_per_sec << "seconds"

<< endl;

}//希爾排序;

void shellsort(int te***, int length)}}

clock_t end = clock();

cout

<< "time taken by shellsort:\t"

<< (double)(end - start) / clocks_per_sec << "seconds"

<< endl;

}//選擇排序;

void selectsort(int temp4, int length)

}temp = (*(temp4 + i));

(*(temp4 + i)) = (*(temp4 + min));

(*(temp4 + min)) = temp;

}clock_t end = clock();

cout

<< "time taken by selectsort:\t"

<< (double)(end - start) / clocks_per_sec << "seconds"

<< endl;

}//歸併排序;

void mergesort(int temp5, int left, int right)

else

}while (i <= mid)

while (j <= right)

for (int l = 0; l//快速排序;

void quicksort(int temp6, int left, int right)

if (iwhile ((iif (i//到此,一輪基於基數的交換完成

quicksort(temp6, left, i - 1);//縮小範圍,在left到i-1範圍內的數都比剛才的基數小,在這個範圍內再選出基數做重複交換,不斷遞迴,直到leftquicksort(temp6, i + 1, right);

}}//堆排序;

/*堆排序是一種基於二叉堆這個資料結構的排序演算法,屬於原地排序

二叉堆滿足二個特性:

1.父結點的鍵值總是大於或等於(小於或等於)任何乙個子節點的鍵值。

2.每個結點的左子樹和右子樹都是乙個二叉堆(都是最大堆或最小堆)。

*/void heapsort(int temp7, int length)

int last = length - 1;

for (int i = 1; i <= length; i++, last--)

}void heaprebuild(int temp7, int root, int size)}}

常見的七種排序

排序演算法大體可分為兩類 非線性時間比較類排序 交換類排序 快速排序和氣泡排序 插入類排序 簡單插入排序和希爾排序 選擇類排序 簡單選擇排序和堆排序 歸併排序 二路歸併排序和多路歸併排序 線性時間非比較類排序 計數排序,桶排序,和基數排序 氣泡排序 重複地走訪過要排序的元素列,依次比較兩個相鄰的元素...

C 實現七種經典排序演算法

具體的排序方法如下所示 1 氣泡排序 基本思想 比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出乙個未排序中最大的數放到陣列後面。常見氣泡排序演算法如下所示 void bubblesort int arr,int n 公升級版氣泡排序法 通過從低到高選出最大的數放到後面,再從高到...

七種常見經典排序演算法總結 C

最近想複習下c 很久沒怎麼用了,畢業時的一些經典排序演算法也忘差不多了,所以剛好一起再學習一遍。除了冒泡 插入 選擇這幾個複雜度o n 2 的基本排序演算法,希爾 歸併 快速 堆排序,多多少少還有些晦澀難懂,幸好又大神dreamcatcher cx都總結成了 一步步很詳細,十分感謝。而且就時間複雜度...