算法思想:每一趟从待排序的记录中选出关键字的最小记录,按照顺序放在已排序的记录序列的最后,直到全部排完。
时间复杂度:O(n^2)–两层循环,并没有优化的方法。
空间复杂度:O(1)—–记录交换时候需要一个辅助空间
算法特点:稳定性可以控制。可以用链式存储。记录移动次数较小。时间复杂度较高。
不多BB,直接上代码:
#include <iostream>
#include <stdio.h>
using namespace std;
void EasySelectionSort(int* original,int length)
{
int i,j,temp;
int minest=0;
for(i=1;i<=length;i++)
{
minest=original[i];
for(j=i+1;j<=length;j++)//i位置后面的记录组中进行循环打擂,如果找到比original更小的数,就与之交换。
if(original[j]<minest)
{
temp=minest;
minest=original[j];
original[j]=temp;
}
}
}
int main()
{
int paixu[100]={0};
int i,n;
paixu[0]=0;
for(i=1;i<100;i++)
{
scanf("%d",&paixu[i]);
if(getchar()=='\n')
break;
else
continue;
}
n=i;
EasySelectionSort(paixu,n);
printf("排序后的结果:\n");
//输出排序后的数组
for(i=1;i<=n;i++)
{
printf("%d ",paixu[i]);
}
printf("\n");
return 0;
}
总结:没有比这更简单更容易实现的排序算法了。主要用于理解后面的堆排序算法。