排序方法總結

2021-08-02 11:03:33 字數 2949 閱讀 3320

mysort.h

#ifndef mysort_h_included

#define mysort_h_included

/*交換排序:氣泡排序,快速排序

*/void bubblesort(int arr, int arrlen);

int slipforquicksort(int arr, int arrleft, int arrright);

void quicksort(int arr, int arrleft, int arrright);

/*選擇排序:直接選擇排序,堆排序

*/void directselectsort(int arr, int arrlen);

void heapadjust(int arr, int parent, int arrlen);

void heapsort(int arr, int arrlen);

/*插入排序:直接插入排序,希爾排序

*/void directinsertsort(int arr, int arrlen);

void shellsort(int arr, int arrlen);

/*合併排序:歸併排序

*/void mergesort(int arr, int temparr, int left, int right);

void merge(int array, int temparray, int left, int middle, int right);

#endif // mysort_h_included

mysort.c

#include "mysort.h"

#include "stdio.h"

void playarr(int arr, int len)

printf("\n");

return;

}void swapnum(int *a, int *b)

/*氣泡排序是交換排序,o(n^2)

*/void bubblesort(int arr, int arrlen)

} }return;}/*

快速排序是交換排序,o(n^2),平均複雜度:n(logn)

int arrleft, int arrright 是陣列下標

*/void quicksort(int arr, int arrleft, int arrright)

return;

}int slipforquicksort(int arr, int arrleft, int arrright)

arr[arrleft] = arr[arrright]; //在右邊找到之後將比basenum小的數字移動到陣列的左邊

//從左到右查詢比basenum大的數字

while ((arrleft < arrright) && (arr[arrleft] <= basenum))

arr[arrright] = arr[arrleft]; //在左邊找到之後將比basenum大的數字移動到陣列的右邊

} arr[arrleft] = basenum; //把基準數字放到arrleft位置上,此時arrleft左邊都是比basenum小的數字,右邊都是比它大的數字

return arrleft;}/*

直接插入排序:o(n^2)

*/void directselectsort(int arr, int arrlen)

} //將最小的數字移動到當前位置

swapnum(&arr[i], &arr[basenum]);

} return;}/*

堆排序:o(nlogn)

*/void heapsort(int arr, int arrlen)

for (i = arrlen - 1; i >= 0 /*arrlen - top */; i--)

return;

}void heapadjust(int arr, int parent, int arrlen)

if (tmp >= arr[leftchild])

arr[parent] = arr[leftchild];

parent = leftchild;

leftchild = 2 * parent + 1;

} arr[parent] = tmp;

return;}/*

直接插入排序:o(n^2) 將n-m個無序數字,插入前面m個有序數字中

*/void directinsertsort(int arr, int arrlen)

arr[j + 1] = tmp; }}

/*希爾排序:平均為:o(n^3/2) 最壞: o(n^2)

*/void shellsort(int arr, int arrlen)

arr[j + addnum] = tmp;

} addnum /= 2;

} return;}/*

int left, int right 為陣列下標

*/void mergesort(int arr, int temparr, int left, int right)

return;

}void merge(int array, int temparray, int left, int middle, int right)

//判斷左序列是否結束

while (left <= leftend)

temparray[tempindex++] = array[left++];

//判斷右序列是否結束

while (rightstart <= right)

temparray[tempindex++] = array[rightstart++];

//交換資料

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

return;

}

排序方法總結

一 選擇排序法 1 預設第乙個數已經排序,且預設第乙個數為最小的數,定義min用來存放最小的數在陣列中的位置。2 用min指向的數 即第乙個數 和第二個數比較,如果第乙個數比第二個數小,min指向不變 為0 如果第乙個數比第二個數大,min指向第二個數 為1 3 用min指向的數和第三個數比較,如果...

排序方法總結

第乙個學會的排序演算法就是冒泡演算法啦,聽說有些傢伙連冒泡演算法都寫不出來 偷笑.冒泡演算法的時間複雜度是o n2 和選擇排序的時間複雜度一樣。這是最基本的排序演算法了,時間複雜度這麼高,自然用處也不會多。選擇排序是冒泡演算法昇華了,氣泡排序是兩個兩個隔空辯論打擂,誰大誰到冠軍座椅繼續接受挑戰,內層...

排序方法總結

選擇排序 public static void selectsort int arr 氣泡排序 public static void bubblesort int arr 插入排序 public static void insertsort int arr 附 swap的兩種方法 swap方法一 p...