基於陣列的排序演算法

2021-08-03 19:38:24 字數 2079 閱讀 8048

在完成各個排序的**前,先完成乙個交換函式和列印函式。

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 三 直接插入排序 排...