本文共 1226 字,大约阅读时间需要 4 分钟。
1: 首先需要任意假设一个数组下标里的元素是最大值或最小值
一般选择数组的第一个元素为最大值或最小值 2: 用 end 表示是这个数组的最后一个下标,如果是从小到大进行排列且假设第一个元素(数组下标为零)为这个数组的最大值 与数组下标从1开始到end的所有元素比较,其他数组元素> max下标所在的数据 就把 max = 比max下标所在的数据大的下标,max 始终是最大元素的下标 3:找出 max 之后,判断是否是end这个下标,不是max下标中的数据和end下标中的数据交换.end这个下标中的数据就不在进行遍历.每找到一次max就把end–,end 这个下标到实际数组中最后一个元素的下标中的数据是一个从小到大有序的数组源代码:
#includeusing namespace std;/*********************************** 函数作用: 使用选择排序从小到大排列整型数据** 函数参数: arr - int类型的数组首地址* num - 数组元素的总个数** 函数返回值: 无返回值**************************************/void choiceSort(int *arr,int num) { //首先i = 这个数组的最后一个下表,每循环一次i--; for (int i = num -1; i >= 0;i--) { int max = 0; //最大数据的下标置零 假设最大数据的下标是零 //从下标为1的数据开始遍历 for (int j = 1; j <= i; j++) { //如果下标为max中的数据小于数组中任意下标(j)中的数据 if (arr[max] <= arr[j]) { //j 赋值给 max 使max 这个下标中的数据永远是这个数组中最大的数据 max = j; } } //结束循环后 //如果 max 不是数组中最后一个元素的下标 if (max != i) { //交换max 和最后一个元素的下标的元素 int tmp; tmp = arr[max]; arr[max] = arr[i]; arr[i] = tmp; } }}int main(void) { int arr[] = { 20,3,4,5,10,8,9,7,18,0 }; choiceSort(arr,sizeof(arr)/sizeof(arr[0])); for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%d\t", arr[i]); } return 0;}
代码测试:
转载地址:http://rfyki.baihongyu.com/