选择排序法:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置。以此类推,直到全部待排序的数据元素的个数为零。
代码:
#include<stdio.h>
#define N 100
void swap(int* a, int* b)//两数交换函数
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int n,i,j,min;
int a[N]={ };
printf("输入正整数n:");
scanf("%d", &n);
printf("输入%d个整数:", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (j = 0; j < n - 1; j++)//选择排序法
{
min = j;
for (i = j; i < n; i++)
{
if (a[i] < a[min])
min = i;
}
swap(&a[j], &a[min]);
}
for (i = 0; i < n; i++)
printf("%d", a[i]);
return 0;
}
方法优化:
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。
优化方法代码:
#include<stdio.h>
#define N 100
void swap(int* a, int* b)//两数交换函数
{
int temp = *a;
*a = *b;
*b = temp;
}
int main()
{
int n,i,j,min,max;
int a[N]={ };
printf("输入正整数n:");
scanf("%d", &n);
printf("输入%d个整数:", n);
for (i = 0; i < n; i++)
scanf("%d", &a[i]);
for (j = 0; j < n/2; j++)//选择排序法优化
{
min = j;
max = n - j-1;
for (i = j+1; i < n - j; i++)//同时筛选最大值和最小值
{
if (a[i] < a[min])
min = i;
if (a[i] > a[max])
max = i;
}
swap(&a[j], &a[min]);//将最小值放在第j+1位(左端)
if (max == j)//考虑最大值在第j+1位(左端)的情况
swap(&a[min], &a[max]);//将最大值放在第n-j+1位(右端)
else
swap(&a[n - j-1], &a[max]);
}
for (i = 0; i < n; i++)
printf("%d", a[i]);
return 0;
}