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...