用选择法对十个整数排序
编译环境VS2017
给定一个数组,用选择法排序,这种思想首先假定数组的首元素为最小(最大)的。此时就要利用3个变量i,j,min(max)表示元素的下标。i表示当前,j表示找到的最小(最大)的下标,min(max)用于存放每次循环中最小(大)值的下标。以找到最小为例:找到最小的下标后赋给max。找到之后判断所假设的当前值是否为此次循环的最小值,如果不是,就交换a[min] 与当前a[i]的值,从而将数组以一定的顺序排放,最后写一个循环将结果输出。
核心代码:
int tepm;
for (int i = 0; i < 10; ++i) {
int min = i;
for (int j = i + 1; j < 10; ++j) {//a[i]依次和a[i]之后的元素作比较,记录较小的下标
if (a[j] < a[min]) {
min = j;
}
}
//当min等于i时,说明a[i]就是a[i]之后所有元素中最小的
// min不等于i时说明a[i]不是a[i]之后所有元素中最小的,最小的为a[mid],将他们的值交换
if (min != i) {
tepm = a[i];
a[i] = a[min];
a[min] = tepm;
}
}
具体实现如下:
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
void sort(int a[]) {
int tepm;
for (int i = 0; i < 10; ++i) {
int min = i;
for (int j = i + 1; j < 10; ++j) {//a[i]依次和a[i]之后的元素作比较,记录较小的下标
if (a[j] < a[min]) {
min = j;
}
}
//当min等于i时,说明a[i]就是a[i]之后所有元素中最小的
// min不等于i时说明a[i]不是a[i]之后所有元素中最小的,最小的为a[mid],将他们的值交换
if (min != i) {
tepm = a[i];
a[i] = a[min];
a[min] = tepm;
}
}
for (int i = 0; i < 10; ++i) {
printf("%d ", a[i]);
}
printf("\n");
}
void main() {
int arr[10];
for (int i = 0; i < 10; ++i) {
printf("请输入数组arr的第%d个数\n", i + 1);
scanf("%d", &arr[i]);
system("cls");
}
printf("数组arr为:\n");
for (int i = 0; i < 10; ++i) {
printf("%d ", arr[i]);
}
printf("\n");
sort(arr);
system("pause");
}