选择排序是一种简单直观的排序算法,基本思想是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。n个元素的数列,需要n-1趟直接排序。
排序过程:
- 拿第1个元素,依次与后面的其他元素逐个比较,找出最小(最大)的元素,放到下标为0的位置。
- 经过第1步,数列的第一个必然是最小(最大)的元素。
- 拿第i个元素,依次与后面的其他元素逐个比较,找出最小(最大)的元素,放到下标为i-1的位置。
- 重复第3步(除了最后一个),每一次都会有一个最小(最大)的元素被找出,放在对应的下标位置。
- 直到每轮比较不再有可交换的元素。
- 排序完成。
算法分析:
基本选择排序的比较次数与序列的初始排序无关。 假设待排序的序列有 N 个元素,则比较次数永远都是N (N - 1) / 2。而移动次数与序列的初始排序有关。当序列正序时,移动次数最少,为 0。当序列反序时,移动次数最多,为3N (N - 1) / 2。所以,综上,简单排序的时间复杂度为 O()。
算法实现:
c语言:
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int num[n];
int i;
for(i=0;i<n;i++)
{
scanf("%d",&num[i]);
}
int j,t;
for(i=0;i<n-1;i++)
{
for(j=i+1;j<n;j++)
{
if(num[i]>num[j])
{
t = num[i];
num[i] = num[j];
num[j] = t;
}
}
}
for(i=0;i<n;i++)
{
printf("%d ",num[i]);
}
return 0;
}