选择排序思路:找到乱序数组中最大元素的位置,再与乱序数组中最后一个元素位置交换,即算完成一次选择排序,再从剩下的数中找最大与剩下乱序数组中最后一个元素位置交换以此循环到排序结束
#include<stdio.h>
#define N 6
//findMaxPos找数组中最大元素位置的函数
int findMaxPos(int arr[], int n)
{
int max = arr[0];//假设最大数为arr[0]
int pos = 0;//pos表示为,=0表示为假设最大值数的位置
int i;
for (i = 1; i < n; i++)
{
if (arr[i] > max)
{
max = arr[i];//实现max与数组中的每个元素比较
pos = i;//i即可以表示循环次数也可以表示数组元素位置
}
}
return pos;
}
//selectionSort实现选择排序即位置交换
void selectionSort(int arr[], int n)
{
while (n > 1)
{
int pos = findMaxPos(arr, n);//得到最大值的位置
int temp = arr[pos];
arr[pos] = arr[n - 1];//最大一个元素与最后一个元素交换位置
arr[n - 1] = temp;
n--;
//n--目的是缩小范围让剩下的元素进行交换位置
//当n不能在缩减时不再交换,即完成排序
}
}
int main()
{
int i, arr[N];
printf("请输入一组乱序的%d个数:\n", N);
for (i = 0; i < N; i++)
{
scanf_s("%d", &arr[i]);
}
selectionSort(arr, N);
printf("排序后的数为:");
for (i = 0; i < N; i++)
{
printf("%d ", arr[i]);
}
return 0;
}