在完成各個排序的**前,先完成乙個交換函式和列印函式。
void show(int
*arr,int len)
printf("\n");
} //交換函式
static void swap(int
*p,int
*s)
sort.h中的函式宣告
#ifndef _sort_h_
#define _sort_h_
void exchange_sort (int *arr,int len);
void bubble_sort(int *arr,int len);
void bubble_sort_ex(int *arr,int len);
void select_sort(int *arr,int len);
void insert_sort(int *arr,int len);
void insert_sort_ex(int *arr,int len);
void shell_sort(int *arr,int len);
int partition(int *arr,int left,int right);
void quick(int *arr,int left,int right);
void quick_sort(int *arr,int len);
void quick_sort_stack(int *arr,int len);
void heap_sort(int *arr,int len);
void meger_sort(int *arr,int len);
void show(int *arr,int len);
int *get_arr(int len);
#endif
1,交換排序
空間複雜度:o(1) 時間複雜度:o(n^2)
思路:序列中的元素不斷交換,第1個元素的值與後面的所有元素的值比較大小,如果其中乙個值比第1個值小,進行交換。依次類推,再將第2個元素與後面的所有元素比較交換,直到n-1個元素為止。時間複雜度較高,最終達到序列有序。
void exchange_sort (int *arr,int
len)}}
}
2,氣泡排序:
空間複雜度:o(1) 時間複雜度:o(n^2)
思路:將序列當中的左右元素,依次比較,始終保證右邊的元素始終大於左邊的元素;( 第一輪結束後,序列最後乙個元素一定是當前序列的最大值;)對序列當中剩下的n-1個元素再次執行上述步驟。對於長度為n的序列,一共需要執行n-1輪比較(利用while迴圈可以減少執行次數)
void bubble_sort(int *arr,int
len);
}}//氣泡排序改進
void bubble_sort_ex(int *arr,int
len)
}}
3,選擇排序
空間複雜度:o(1) 時間複雜度:o(n^2)
思路:比較+交換。從待排序序列中,假設第乙個數為最小值,將其與剩餘元素進行比較,用下標變數k來記錄最小數所在的元素的下標。一趟比較完成後,將arr[0]與arr[k]進行交換。然後設第2位存放次小的數,依次類推。
int
min = arr[0];
int min_index = 0;
int i;
int j;
for(i = 0;i1;i++)
}if(i != min_index)
}
4,插入排序
空間複雜度:o(1) 時間複雜度:o(n^1.5)/o(n^2)
思路:思路:直接插入排序的核心思想就是:將陣列中的所有元素依次跟前面已經排好的元素相比較,如果選擇的元素比已排序的元素小,則交換,直到全部元素都比較過。
void insert_sort_ex(int *arr,int
len)}}
}
以上是四種排序的**詳解,若存在問題,歡迎指正。 基於陣列的排序演算法
上次已經對幾種排序演算法進行了分析,接下來對剩餘的幾種排序演算法進行分析,以及給出測試函式。int get arr int len return arr 5,希爾排序 空間複雜度 o 1 時間複雜度 o n 1.35 o n 1.5 思路 將待排序陣列按照步長gap進行分組,然後將每組的元素利用直接...
各種排序演算法總結 基於陣列
寫 前,將這些演算法分步驟建立模型,就好寫了 1 氣泡排序 氣泡排序是非常容易理解和實現,以從小到大排序舉例 設陣列長度為n。比較相鄰的前後二個資料,如果前面資料大於後面的資料,就將二個資料交換。這樣對陣列的第0個資料到n 1個資料進行一次遍歷後,最大的乙個資料就 沉 到陣列第n 1個位置。n n ...
基於整型陣列的幾種基本的排序演算法
一 選擇排序 排成從小到大的順序 不穩定,時間複雜度 最差 平均都是o n2 1.演算法思路 找出陣列中最小的數與第乙個數進行交換 找出陣列中第二小的數與第二個數進行交換 依此類推,直到陣列排序完畢.2.例子 void selectsort int arr,int length 三 直接插入排序 排...