日期:2014-05-16 浏览次数:20624 次
梳排序改良自冒泡排序和快速排序,是不稳定排序算法。梳排序的递减率关系着算法的效率,递减率常常使用1.3,也有人提议用1.247330950103979。下面给出关键代码:
1、梳排序头文件: combSort.h
#ifndef COMBSORT_H #define COMBSORT_H #define SHRINK_FACTOR 1.3 #include <stdbool.h> extern void combSort(int *pArr, const int length); #endif
2、梳排序源文件: combSort.c
#include "combSort.h" void combSort(int *pArr, const int length) { bool swapped=true; int i, tmp, gap=length; while(gap > 1 || swapped) { swapped=false; if(gap>1) { gap /= SHRINK_FACTOR; } i=0; while(i+gap<length) { if(*(pArr+i)>*(pArr+i+gap)) { tmp = *(pArr+i); *(pArr+i) = *(pArr+i+gap); *(pArr+i+gap) = tmp; swapped=true; } i++; } } }
3、main头文件:main.h
#ifndef MAIN_H #define MAIN_H #define MAX_VALUE 1000 #include <stdlib.h> #include <stdio.h> #include "combSort.h" int main(void); void initRandomArr(int * pArr, const int length); void showArr(const int *pArr, const int length); #endif
4、main源文件:main.c
#include "main.h" int main(void) { printf("input array length:\n"); int len; scanf("%d", &len); if(len < 1) { printf("array length must be larger %d \n", len); return EXIT_FAILURE; } int arr[len]; initRandomArr(arr, len); printf("get random array:\n"); showArr(arr, len); combSort(arr, len); printf("comb sort result:\n"); showArr(arr, len); return EXIT_SUCCESS; } void showArr(const int *pArr, const int length) { int i=0; while(i<length) { printf("%d ", *(pArr+i)); i++; } printf("\n"); } void initRandomArr(int *pArr, const int length) { int i; srand(time(0)); for(i=0;i<length;i++) { *(pArr+i) = rand()%MAX_VALUE; } }
5、编译:
[root@localhost combSort]$ gcc -c combSort.c [root@localhost combSort]$ gcc -c main.c [root@localhost combSort]$ gcc -o main main.o combSort.o
执行可执行文件main,大致如下:
[root@localhost combSort]$ ./main input array length: 10 get random array: 767 740 68 436 307 343 72 314 863 790 comb sort result: 68 72 307 314 343 436 740 767 790 863
梳排序时间复杂度:O(nlog n)