C语言实现数字选择排序
选择排序
选择排序设置一个起始位置,将其后面未排序的元素进行比较,每选出一个最小(大)的数字将其放在起始位置并将起始位置向后移动一位,直到起始位置移到最后一位。此时便完成了排序。
例如:
有数组 12 8 3
起始位置为第一个数字
第一次排序后:8 12 3
第二次:3 12 8
起始位置后的所有元素已经交换完,起始位置变为为第二个数字
第三次:3 8 12
结束
代码如下
//升序排序
#include<stdio.h>
void swap(int* a, int* b);
void rank(int a[], int len);
#define N 10
int main()
{
int a[N], i , len;
len = sizeof(a) / sizeof(a[0]);
for (i = 0; i < 10; i++)
scanf_s("%d", &a[i]);
rank(a, len);
for (i = 0; i < len; i++)
printf("%d ", a[i]);
return 0;
}
void swap(int* a, int* b)//将最小的数与起始位置交换
{
int x;
x = *b;
*b = *a;
*a = x;
}
void rank(int a[], int len)
{
int i, k,min;
for (i = 0; i < len - 1; i++)
{
min = i;//起始位置
for (k = i+1; k < len; k++)
{
if (a[k] < a[min])//判断起始位置后的数字大小,将最小的数字交换到起始位置
{
swap(&a[k], &a[min]);
}
}
}
}