C語言實現各種排序(1)

2021-09-03 06:59:13 字數 2289 閱讀 4112

#include//排序分為插入排序,希爾排序,氣泡排序,快速排序,選擇排序,堆排序,歸併排序,基數排序(桶排序)

//直接插入排序,較為簡單,思路為從第二個數開始逐個將其插入前面有序的序列中

//平均時間複雜度為o(n2),最快時間複雜度為o(n),最壞時間複雜度為o(n2),空間複雜度為o(1)

void insertsort(int *a,int n) }}

//折半插入排序

//思路相同,查詢方法改為折半查詢插入位置

void binsertsort(int *a, int n)

int j;

for (j = i - 1; j > high; j--)

a[j + 1] = a[0];

} }}

//二路插入排序

//具體實現不再寫,思路為設定乙個頭指標為較小的數,設定乙個尾指標為較大的數,開始迴圈查詢,若數比頭指標小則插入頭指標前,若比尾指標大

//則插入尾指標後,若在二者之間則利用二分查詢找到合適的插入位置進行位置變換。

//希爾排序思路與直接插入排序相似,加入步長概念,原理為排較為有序的序列時時間較短

//平均時間複雜度o(n1.3),空間複雜度為o(1)

void shellinsert(int *a, int n, int dk)//一趟希爾插入排序,dk為步長 }}

void shellsort(int *a, int n, int *dlt,int k)//按照增量為dlt[0...k-1]做一次希爾排序

}//基於交換的排序,氣泡排序法

//平均時間複雜度為o(n2),最壞時間複雜度為o(n2),最好時間複雜度為o(n)

void bubblesort(int *a, int length)//相當於每次將最大或最小的排到最後乙個

} }}

//快速排序,設定low和high兩個指標,每次排完後找到乙個樞軸,使其左邊為比它小的元素,右邊為比它大的元素;

//再繼續對其左邊和右邊執行這個過程

//平均時間複雜度和最好時間複雜度都為o(n*logn),最壞時間複雜度為o(n2)

int partition(int *a, int left,int right)

a[low] = base;

return low;

}void qsort(int *a, int left, int right)

}//基於選擇的排序

//選擇排序,思路為每次迴圈找到最小的並將其放在陣列頭處

//平均複雜度o(n2),最壞情況o(n2),最好情況o(n)

void selectsort(int *a, int n)

temp = a[min];

a[min] = a[i];

a[i] = temp; }}

//堆排序 思路:建立堆,初始化堆,每次輸出堆頂後將最後乙個節點與堆頂互換,重新調整堆

//該排序為從小到大排序

//平均最壞最好時間複雜度都為o(n*logn)

typedef struct heap heap;

void heapadjust(heap h,int s,int m)//調整使其成為乙個大頂堆

}void heapsort(heap h)

//初始化堆

for (i = h.length; i > 1; i--)

//將堆頂和最後乙個互換位置,然後對前i-1個元素重新調整

}//歸併排序,平均最好最壞時間複雜度都為o(n*logn)

//思路對每一部分進行排序,使用的思想是歸併思想,利用分治的策略解決問題

//重複比較加填入的方法

int main()

; /*insertsort(a, 10);*/ //插入排序測試

/*binsertsort(a, 10);*/ //二分插入排序測試

/*int dlt[4] = ; //希爾排序測試

shellsort(a, 10, dlt, 4);*/

/*bubblesort(a + 1, 10);*/ //氣泡排序測試

/*qsort(a, 1, 10);*/ //快排測試

/*selectsort(a+1, 10);*/ //選擇排序測試

/*heap h; //堆排序測試

h.elem = a;

h.length = 10;

heapsort(h);*/

for (int i = 1; i < 11; i++)

printf("%d ", a[i]);

}

C語言實現各種排序演算法

對輸入的n個數進行排序並輸出。輸入描述 輸入的第一行包括乙個整數n 1 n 100 接下來的一行包括n個整數。輸出描述 可能有多組測試資料,對於每組資料,將排序後的n個整數輸出,每個數後面都有乙個空格。每組測試資料的結果佔一行。輸入例子 4 1 4 3 2 輸出例子 1 2 3 4 ac code ...

排序 1 選擇排序 C語言實現

選擇排序的基本思想 選擇排序 selection sort 是一種簡單直觀的排序演算法。它的工作原理如下。首先在未排序序列中找到最小 大 元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小 大 元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。我的通俗解釋 第一遍...

各種排序方法的 語言實現

對順序錶用 語言實現直接插入排序 折半插入排序 希爾排序 快速排序 選擇排序 冒泡優化排序 堆排序,如下 include include include include include include define maxsize 100 typedef int redtype typedef st...