代码:
/************************************************** * 选择排序 * * 参考:算法导论 第3版 第一部分 第2章 2.2 * * 本例中,数组的第0个位置存放的数值无意义,不参与程序运行过程 **************************************************/ #include <stdio.h> #include <stdlib.h> #include <time.h> // 选择排序 void selection_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: "); display(A, length); // 插入排序 selection_sort(A, length); // 打印排序后的数组 printf("After sort: "); display(A, length); return 0; } // 选择排序 void selection_sort(int A[], size_t length) { for (size_t i = 1; i <= length; ++i) { size_t i_min = i; for (size_t j = i + 1; j <= length; ++j) { if (A[j] < A[i_min]) { i_min = j; } } // 交换元素 int temp = A[i_min]; A[i_min] = A[i]; A[i] = temp; } } // 使用随机数填充数组 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(" "); }
输出:
Before sort: 379 926 992 362 457 693 885 454 232 808 After sort: 232 362 379 454 457 693 808 885 926 992