选择排序
选择排序
算法描述:
选择排序的思想非常的朴实,看名字就能容易地理解它——根据从小到大(或从大到小)的排序需求,每一次从待排序的数据元素中选择最小(或最大)的一个元素,移动过到序列的起始位置,然后在剩余的待排序元素中进行排序。
输入格式:
每次运行时,仅输入10 个由空格分隔的整数Number i (1 <= Number i <= 1000),(其中1 <= i <= 10)。
输出格式:
输出为一行,包括排序后的10个输入整数,每两个整数之间有一个空格,最后一个整数后面没有空格。
样例输入1:
1 2 3 4 5 6 7 8 9 10
样例输出1:
10 9 8 7 6 5 4 3 2 1
样例输入2:
2 3 1 9 5 4 4 3 3 2
样例输出2:
9 5 4 4 3 3 3 2 2 1
代码:
#include <stdio.h>
void swap(int *a, int *b)
{
int tmp;
if(*a < *b)
{
tmp = *a;
*a = *b;
*b = tmp;
}
}
int main() {
int n = 10;
int max;
int numbers[10];
int i;
int j;
int index;
// 读入给定的数字
for (i = 0; i < n; i++) {
scanf("%d", &numbers[i]);
}
// 冒泡排序
/*
for(i=0;i<n;i++)
{
for(j=0;j<n-i-1;j++)
{
swap(&numbers[j], &numbers[j+1]);
}
}
*/
// 选择排序
for(i=0;i<n-1;i++)
{
index = i + 1;
max = numbers[index];
for(j=i+1;j<n-1;j++)
{
if(max < numbers[j+1])
{
max = numbers[j+1];
index = j+1;
}
}
swap(&numbers[i], &numbers[index]);
}
// 输出
for(i=0;i<n;i++)
{
printf("%d", numbers[i]);
if(i+1 == n || printf(" "));
}
return 0;
}
知行合一,
翻万卷书,游千里路,会百家才