插入排序
代码:
/************************************************** * 插入排序 * * 参考:算法导论 第3版 第一部分 第2章 2.1 * * 本例中,数组的第0个位置存放的数值无意义,不参与程序运行过程 **************************************************/ #include <stdio.h> #include <stdlib.h> #include <time.h> // 插入排序 void insertion_sort(int [], size_t); // 使用随机数填充数组 void fill_array_with_random(int [], size_t); // 打印数组 void display(int [], size_t); int main(int argc, const char * argv[]) { // 设定数组长度 size_t length = 10; int A[length]; // 使用随机数填充数组 fill_array_with_random(A, length); // 打印排序前的数组 printf("Before sort:\n"); display(A, length); // 插入排序 insertion_sort(A, length); // 打印排序后的数组 printf("After sort:\n"); display(A, length); return 0; } // 插入排序 void insertion_sort(int A[], size_t length) { for (size_t i = 2; i <= length; ++i) { int key = A[i]; size_t j; for (j = i - 1; j > 0 && A[j] > key; --j) { A[j + 1] = A[j]; } A[j + 1] = key; } } // 使用随机数填充数组 void fill_array_with_random(int A[], size_t length) { // 指定生成的随机数范围为[lower_limit, upper_limit) int lower_limit = 100; int upper_limit = 1000; srand((unsigned int)time(NULL)); for (size_t i = 1; i <= length; ++i) { A[i] = rand() % (upper_limit - lower_limit) + lower_limit; } } // 打印数组 void display(int A[], size_t length) { for (size_t i = 1; i <= length; ++i) { printf("%d ", A[i]); } printf("\n"); }
输出:
Before sort: 398 176 747 234 835 263 121 459 155 227 After sort: 121 155 176 227 234 263 398 459 747 835
豪情壮志铁傲骨,原来英雄是孤独。