梳狀排序
梳狀排序和氣泡排序的基本思想是相同的。換句話說,梳狀排序是對氣泡排序的改進。在氣泡排序技術中,每一階段都會將一個元素與下一個元素進行比較。但在梳狀排序中,元素會按特定的間隔進行排序。每個階段完成後,間隔就會減小。這種排序的遞減因子或收縮因子是 1.3。這意味著每個階段完成後,間隔就會除以 1.3。
梳狀排序技術的複雜性
- 時間複雜度:最好情況下的時間複雜度為 O(n log n)。對於平均情況,時間複雜度為 O(n^2/2^p)(p 是增量數),對於最壞情況,時間複雜度為 O(n^2)。
- 空間複雜度:O(1)
輸入和輸出
Input: A list of unsorted data: 108 96 23 74 12 56 85 42 13 47 Output: Array before Sorting: 108 96 23 74 12 56 85 42 13 47 Array after Sorting: 12 13 23 42 47 56 74 85 96 108
演算法
CombSort(array, size)
輸入:一個數據陣列,以及陣列中的總數量
輸出:排序後的陣列
Begin gap := size flag := true while the gap ≠ 1 OR flag = true do gap = floor(gap/1.3) //the the floor value after division if gap < 1 then gap := 1 flag = false for i := 0 to size – gap -1 do if array[i] > array[i+gap] then swap array[i] with array[i+gap] flag = true; done done End
示例
#include<iostream>
#include<algorithm>
using namespace std;
void display(int *array, int size) {
for(int i = 0; i<size; i++)
cout << array[i] << " ";
cout << endl;
}
void combSort(int *array, int size) {
int gap = size; //initialize gap size with size of array
bool flag = true;
while(gap != 1 || flag == true) {
gap = (gap*10)/13; //minimize gap by shrink factor
if(gap<1)
gap = 1;
flag = false;
for(int i = 0; i<size-gap; i++) { //compare elements with gap
if(array[i] > array[i+gap]) {
swap(array[i], array[i+gap]);
flag = true;
}
}
}
}
int main() {
int n;
cout << "Enter the number of elements: ";
cin >> n;
int arr[n]; //create an array with given number of elements
cout << "Enter elements:" << endl;
for(int i = 0; i<n; i++) {
cin >> arr[i];
}
cout << "Array before Sorting: ";
display(arr, n);
combSort(arr, n);
cout << "Array after Sorting: ";
display(arr, n);
}輸出
Enter the number of elements: 10 Enter elements: 108 96 23 74 12 56 85 42 13 47 Array before Sorting: 108 96 23 74 12 56 85 42 13 47 Array after Sorting: 12 13 23 42 47 56 74 85 96 108
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP