梳理排序的 C++ 程式?
梳理排序與氣泡排序和雞尾酒排序類似。梳理排序一開始不會檢視相鄰元素,而會檢視相隔一定數量索引的元素,這被稱為差距。差距定義為 [n/c],其中 n 是元素數量,c 是收縮因子。每次迭代後,該數字會除以 c 並取整,最終該演算法會檢視相鄰元素。
Input:53421 Output:12345
解釋
梳理排序比較兩個元素,其中差距定義為 [n/c],其中 n 是元素數量,c 是收縮因子,即 1.3。每次迭代後,該數字會除以 c 並取整,最終該演算法會檢視相鄰元素。
示例
#include <iostream>
using namespace std;
void combsort(int a[], int n) {
int i, j, gap, swapped = 1;
double temp;
gap = n;
while (gap > 1 || swapped == 1) {
gap = gap * 10 / 1.3;
if (gap == 9 || gap == 10) {
gap = 11;
}
if (gap < 1) {
gap = 1;
}
swapped = 0;
for (i = 0, j = gap; j < n; i++, j++) {
if (a[i] > a[j]) {
temp = a[i];
a[i] = a[j];
a[j] = temp;
swapped = 1;
}
}
}
}
int main () {
int n, i;
int arr[] = { 5, 3, 4, 2, 1 };
n=5;
combsort(arr, n);
for(i = 0;i < n;i++) {
cout<<arr[i]<<"\t";
}
return 0;
}
廣告
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP