源码如下:
选择排序法是一种不稳定的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。
#include<stdio.h>
#include<stdlib.h>
#define N 10
int main()
{
int arr[N];
printf("排序前:\n");
for(int i=0;i<N;i++)
{
arr[i] = rand()%1000;
printf("arr[%d] = %d\n",i,arr[i]);
}
int t;
printf("排序后:\n");
for(int i=0;i<N-1;i++)
{
for(int j=i+1;j<N;j++)
{
if(arr[i]>arr[j])
{
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
}
for(int i=0;i<N;i++)
{
printf("arr[%d] = %d\n",i,arr[i]);
}
return 0;
}
选择排序法提升
比较次数不可以减少,交换次数可以减少
#include<stdio.h>
#include<stdlib.h>
#define N 10
int main()
{
int arr[N];
printf("排序前:\n");
for(int i=0;i<N;i++)
{
arr[i] = rand()%1000;
printf("arr[%d] = %d\n",i,arr[i]);
}
printf("排序后:\n");
for(int i=0;i<N-1;i++)
{
int t = i;
for(int j=i+1;j<N;j++)
{
if(arr[t]>arr[j]) //注意!!!
{
t = j;
}
}
if(t!=i)
{
int t2 = arr[i];
arr[i] = arr[t];
arr[t] = t2;
}
}
for(int i=0;i<N;i++)
{
printf("arr[%d] = %d\n",i,arr[i]);
}
return 0;
}