9種排序演算法總結

2022-08-05 14:14:18 字數 2461 閱讀 1332

各種排序演算法複雜度比較

兩兩比較,從底往上升。

void bubble_sort(int arr, int len)="" }="">

固定位置,找元素

c++**實現

void select_sort(int arr, int len) ="" if="" (index="" !="i)" ="" }="">

固定元素找位置

void insert_sort(int arr, int len) ="" arr[j="" +="" 1]="k;" }="">

挖坑填數+分治法

c++**實現

void quick_sort(int arr, int left, int right)="" arr[i]="target;" quick_sort(arr,="" left,="" i="" -="" 1);="" quick_sort(arr,="" i="" +="" 1,="" right);="">

void merge(int arr, int temp_arr, int start_index, int mid_index, int end_index) //將另一個數列的資料依次取出即可 while (first < mid_index="" +="" 1)="" ="" while="" (second="">< end_index="" +="" 1)="" temp_arr[index="" ++]="arr[second" ++];="" for="" (i="0," j="start_index;" j="">< end_index="" +="" 1;="" i="" ++,="" j="" ++)="" arr[j]="temp_arr[i];" }="" void="" merge_sort(int="" arr,="" int="" temp_arr,="" int="" start_index,="" int="" end_index)="" ="">

將堆頂元素通過最後一個元素 r[n] 交換

由於交換後新堆頂可能違反堆的性質,因此需要重新調整為新堆,然後再次將 r[1]與無序區最後一個元素交換

不斷重複,直到有序區的個數為n-1

c++**實現

/** * 將陣列arr構建大根堆 * @param arr 待調整的陣列 * @param i 待調整的陣列元素的下標 * @param len 陣列的長度 */void heap_adjust(int arr, int i, int len)="" else="" break;="" }}/**="" *="" 堆排序演算法="" */void="" heap_sort(int="" arr,="" int="" len) for (i = len - 1; i > 0; i--) }

分組插入排序,又稱縮小增量排序

c++**實現

void shellsort3(int a, int n)

c++**實現

//最大位數int maxbit(int data, int n) } return d; } //基數排序 void radixsort(int data, int n) ="" for(j="1;" j="">< 10;="" j++)="" count[j]="count[j" -="" 1]="" +="" count[j];="" 將tmp中的位置依次分配給每個桶="" for(j="n" -="" 1;="" j="">= 0; j--) //將所有桶中記錄依次收集到tmp中 for(j = 0; j < n;="" j++)="" 將臨時陣列的內容複製到data中="" data[j]="tmp[j];" radix="radix" *="" 10;="" }="" }="">

c++**實現

void countsort(int *arr, int len)="" int="" range="max" +="" 1="" -="" min;="" 得到最大最小值的差距="" int="" *count="new" int[range];="" 用於記錄陣列中每個數字出現的次數="" for(int="" i="0;" i="">< len;="" ++i)="" 初始化="" count[i]="0;" for(int="" i="0;" i="">< len;="" ++i)="" count[="" arr[i]-min="" ]++;="" arr[i]="" -="" min="" 對映到tmp中的一個下標,該下標下的值是這個數出現的次數="" int="" index="0;" for(int="" i="0;" i="">< range;="" ++i)="" 再把臨時陣列記錄的數分別拷貝到原陣列中="" }="">

快速排序演算法

快速排序 quicksort 1 演算法思想 快速排序是c r a hoare於1962年提出的一種劃分交換排序。它採用了一種分治的策略,通常稱其為分治法 divide and conquermethod 。 1 分治法的基本思想 分治法的基本思想是 將原問題分解為若干個規模更小但結構與原問題相似的子...

排序演算法之希爾排序及其增量序列

其他排序方法 選擇排序 氣泡排序 歸併排序 快速排序 插入排序 希爾排序 堆排序 希爾排序大概就是,選一組遞減的整數作為增量序列。最小的增量必須為1 dm dm 1 d1 1 role presentation style position relative d m dm 1 d1 1dm dm 1...

Python實現歸併排序演算法

python實現歸併排序演算法 歸併排序1945年由約翰 馮 諾伊曼首次提出。該演算法是採用分治法 divide and conquer 的一個非常典型的應用,且各層分治遞迴可以同時進行。 分治法的基本思想 將原問題分解為若干個規模更小但結構與原問題相似的子問題。遞迴地解這些子問題,然後將這些子問題的解...