选择法的特点:
将两个相邻的元素相比,比较它们的大小。
//举例:用选择法将八个整数从大到小排序
#include<stdio.h>
#define N 8
int main()
{
int arr[N];
int i,j,max,tem;
printf("请输入八个整数:\n");
for (i = 0; i < N; i++)
{
printf("arr[%d]=", i);
scanf_s("%d", &arr[i]);
}
printf("\n");
printf("未排序之前的数字如下:\n");
for (i = 0; i < N; i++)
printf("%5d", arr[i]);
printf("\n");
for (i = 0; i < N - 1; i++)//注意这边的是N-1,目的是防止j=i+1大于数组的元素个数
{
max = i;
for (j = i + 1; j < N; j++)
{
if (arr[j] > arr[max])
max = j;
}
if (max != i)
{
//tem作为临时变量进行保存,防止值被覆盖
tem = arr[i];
arr[i] = arr[max];
arr[max] = tem;
}
}
printf("从大到小排序,输出为:\n");
for (i = 0; i < N; i++)
printf("%5d", arr[i]);
printf("\n");
return 0;
}
在for循环(排序)里的运行示例:
假如有4个数:6、7、8、9
max=i (max=0);
j=1;
arr[1] (=7)>arr[0] (=6);
max=j (max=1);
tem=arr[0] (tem=6);
arr[0]=arr[1] (arr[0]=7);
arr[1]=tem (arr[1]=6);
以此类推······
最后从大到小的排序完成。