本来再想,写这样的初级代码发还是不发,后来还是帖了出来。
#include <stdio.h> #include <stdlib.h> #include <time.h> static void genIntArray(int *arr, int nlen) { srand((unsigned)time(NULL)); while(nlen--) *arr++ = rand() % 300 + 5; } static void insertion_sort(int *arr, int nlen, int (*sort_func)(int, int)) { int i, j, tmp; for( i = 1; i < nlen; i++) { j = i; while( j > 0 && sort_func(arr[j], arr[j - 1])) { tmp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = tmp; --j; } } } static int lower_sort(int num1, int num2) { return num1 > num2; } static int upper_sort(int num1, int num2) { return num1 < num2; } static void printArray(int *arr, int nlen) { printf("["); while(--nlen) printf("%d, ", *arr++); printf("%d]\n", *arr); } int main(void) { int len = 10; int arr[len]; genIntArray(arr, len); printf("before sort:"); printArray(arr, len); insertion_sort(arr, len, lower_sort); printf("after lower sort:"); printArray(arr, len); insertion_sort(arr, len, upper_sort); printf("after upper sort:"); printArray(arr, len); return 0; }
后记:在编程中,时常把一个函数当做参数传来传去,这也是编程里面比较有意思的事情。