梳理排序的 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; }
广告