输入: 待排序的整型数组, 输出: 排序完毕的整型数组.
排序方法: 按照从小到大排序.
数组下标0, 不存放元素, 用作哨兵或其它用途.
实现思路:
每次循环一次, 把最小的值放在首位.
例如让第1个值, 分别与后面所有的值比较, 如果发现后面有值比第1个值小,
则记录下这个位置, 当一次循环完毕后记录的位置就是最小值, 交换记录位置
的值和当前值.
完整实现代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>void getRandomArr (int arr[], int n);
void printArr (int arr[], int n);
void swap (int arr[], int i, int j);
void selectSort (int arr[], int n);int main () {int max = 10; // 数组长度int sortArr[max]; // 待排序数组getRandomArr(sortArr, max); // 为待排序数组, 赋值printf("待排序的元素如下: \n");printArr(sortArr, max);printf("排序完毕的元素如下(从小到大): \n");selectSort(sortArr, max);printArr(sortArr, max);return 0;
}// 函数功能: 对主程序中的数组进行, 随机数赋值
// 参数: arr[] 主程序数组名称, n 数组大小
void getRandomArr (int arr[], int n) {int i;arr[0] = 0; // 默认0号下标, 值为0srand(time(0)); // 随机数种子for (i=1; i<n; i++) {arr[i] = rand() % 150 + 1; // 范围[1, 150]}
}// 函数功能: 打印数组
// 参数: arr[] 需要打印的数组, n 数组大小
void printArr (int arr[], int n) {int i;for (i=0; i<n; i++) {printf("arr[%d]: %d\n", i, arr[i]);}printf("\n");
}// 函数功能: 交换数组i和j下标的2个元素
void swap (int arr[], int i, int j) {int tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;
}// 函数功能: 完成对arr[]的排序
// 参数: arr[] 待排序的数组, n该数组的长度
void selectSort (int arr[], int n) {int i;int j;int minPos; // 最小值下标for (i=1; i<n; i++) {minPos = i;for (j=i+1; j<n; j++) {if (arr[minPos] > arr[j]) {minPos = j;}}if (minPos != i) {swap(arr, i, minPos);}}
}