//选择排序,例如:54321
//n-1次比较从n个中选择最小值,与第一个交换;4次比较,从5个中选最小
//n-2次比较从n-2个中选择次小值,与第二个交换;3次比较,从4个中选最小
简单选择排序的实现
#include <stdio.h>
int main(int argc, char const *argv[])
{
//选择排序,例如:54321
int i, j, t;
for (i = 0; i < n - 1; i++)
{//n-1次比较从n个中选择最小值,与第一个交换;4次比较,从5个中选最小
k = i;
for (j = i + 1; j < n; j++)
{//n-2次比较从n-2个中选择次小值,与第二个交换;3次比较,从4个中选最小
if (a[k] > a[j])
k = j;
}
if (k != i)
{
t = a[k];
a[k] = a[i];
a[i] = t;
//12 23 45 4
}
}
return 0;
}
函数实现选择排序
#include<stdio.h>
void sort(int a[],int n)
{
int i,j,t;
for(i=0;i < n-1;i++) //比较n-1次
{
int k = i; //暂存i
for(j = i+1;i<n;j++)
{
if(a[k]>a[j])
k=j;
}
if( k != i) //交换位置,小的往前放
{
t = a[k];
a[k]=a[i];
a[i]=t;
}
}
}
int main()
{
//n-1次比较从n个中选择最小值,与第一个交换;
//n-2次比较从n-1中选择次小值,与第二个交换;
int a[5]={12,45,16,32,54};
int *p = a;
int i;
sort(a,5);
for(i=0; i<5;i++)
printf("%d",p[i]);
return 0;
}