简单选择排序
- 实现思想
- 采用最简单的选择方式,从头到尾扫描待排序列,找一个最小的记录(递增排序),和第一个记录交换位置,再从剩下的记录中继续反复这个过程,直到全部有序。
- 时间复杂度
- 最好情况:O(n²)
- 最坏情况:O(n²)
- 平均时间复杂度:O(n²)
- 空间复杂度
- 稳定性
代码
#include<stdio.h>
void SelectSort(int r[],int n){
int i,j,tmp;
for(i=1;i<n;i++){
j=SelectMin(r,i,n);
if(i!=j){
tmp=r[i];
r[i]=r[j];
r[j]=tmp;
}
}
}
int SelectMin(int r[],int i,int n){
int j,min;
min=i;
r[0]=r[i];
for(j=i;j<=n;j++){
if(r[j]<r[0]){
r[0]=r[j];
min=j;
}
}
return min;
}
void Output(int r[],int n){
int i;
for(i=1;i<=n;i++){
printf("%d ",r[i]);
}
printf("\n");
}
void main(){
int n=8;
int r[9]={0,3,1,7,5,2,4,9,6};
printf("未排序的集合为:\n");
Output(r,n);
SelectSort(r,n);
printf("从小到大排序后的集合为:\n");
Output(r,n);
}