排序比較演算法c

2021-10-23 11:10:38 字數 3227 閱讀 3919

氣泡排序

時間複雜度:o(n

2)

o(n^2)

o(n2

)

#include

#include

#include

using

namespace std;

void

bubblesort

(int arr,

int len)}}

}int

main

(void

) cout << endl;

bubblesort

(arr,20)

;for

(int i =

0; i <

20; i++

) cout << endl;

return0;

}

快速排序

時間複雜度:o(n

logn

)o(nlogn)

o(nlog

n)

#include

#include

#include

using

namespace std;

intpartition

(int arr,

int left,

int right)

int temp = arr[left]

;// 以第乙個元素值為比較基準

while

(left < right)

if(left < right)

arr[left++

]= arr[right]

;// 把找到的值賦值給左側,然後left位置右移一位

while

(left < right && arr[left]

<= temp)

// 從左側查詢比基準大的位置

if(left < right)

arr[right--

]= arr[left]

;// 把找到的值賦值給右側,然後right位置左移一位

} arr[left]

= temp;

return left;

}void

quicksort

(int arr,

int left,

int right)

int l =

partition

(arr, left, right)

;// 中間位置

quicksort

(arr, left, l -1)

;// 遞迴左側排序

quicksort

(arr, l +

1, right)

;// 遞迴右側排序

}int

main

(void

) cout << endl;

quicksort

(arr,0,

19);for

(int i =

0; i <

20; i++

) cout << endl;

return0;

}

應用:乙個整形陣列,把資料連線成乙個最小的數

bool

compare

(int a,

int b)

return

false;}

intmain

(void);

for(

int i =

0; i <

8; i++

) cout << endl;

quicksort

(arr,0,

7);sort

(arr, arr +

8, compare)

;for

(int i =

0; i <

8; i++

) cout << endl;

return0;

}

陣列索引排序

int

main()

; vector<

int>

idx(5)

;itoa

(idx.

begin()

, idx.

end(),

0);sort

(arr, arr +5,

[&](

int&i,

int&j));

return0;

}

堆排序

對於大頂堆:arr[i] >= arr[2i + 1] && arr[i] >= arr[2i + 2]

對於小頂堆:arr[i] <= arr[2i + 1] && arr[i] <= arr[2i + 2]

#include

#include

#include

#include

#include

using

namespace std;

void

heapify

(int

*arr,

int i,

int len)

if(right < len && arr[right]

> arr[largestindex])if

(largestindex != i)

}void

buildmaxheap

(int

*arr,

int length)

}/**

* @brief 大堆排序.

* @param arr 陣列(完全二差數).

* @param length 陣列長度.

*/void

heapsort

(int

*arr,

int length)

buildmaxheap

(arr, length)

;int i = length;

while

(i)}

intmain()

;heapsort

(arr,8)

;return0;

}

C 排序演算法的比較

首先通過圖表比較不同排序演算法的時間複雜度和穩定性。排序方法 平均時間 最壞情況 最好情況 輔助空間 穩定性 直接插入排序 o n2 o n2 o n o 1 是氣泡排序 o n2 o n2 o n o 1 是簡單選擇排序 o n2 o n2 o n2 o 1 是希爾排序 o nlog2n o n2...

排序演算法比較

本章中已經研究並仔細分析了多個內部排序方法。對於這些內部排序方法之間的比較,主要從以下幾個方面綜合考慮 時間複雜度 空間複雜度 演算法穩定性 演算法簡單性 待排序記錄數 n的大小 記錄本身的資訊量等。選擇n 個整數組成一些隨機排序,各種內部排序方法的實際時間如圖 7 10 所示。從時間複雜度看,所有...

排序演算法比較

排序方法 最好時間 平均時間 最壞時間 輔助儲存 穩定性備註 簡單選擇排序 o n2 o n2 o n2 o 1 不穩定n小時較好 直接插入排序 o n o n2 o n2 o 1 穩定大部分已有序時較好 氣泡排序 o n o n2 o n2 o 1 穩定n小時較好 希爾排序 o n o nlogn...