简单选择排序的基本思想是每一趟在n-i+1(i=0,1,2….n-1)个记录中选择关键字最小的记录作为有序系列的第i个记录。最大的特点是交换移动数据的次数相当少。
- 简单选择排序的时间复杂度:O(n^2);
简单选择排序是不稳定的排序算法,不需要额外的空间。举个例子,序列5 8 5 2 9,我们知道第一遍选择第1个元素5会和2交换,那么原序列中2个5的相对前后顺序就被破坏了,所以选择排序不是一个稳定的排序算法。
算法实现:
#include <stdio.h>
#include <stdlib.h>
void simpleSelectSort(int arr[],int size){//简单选择排序
int i,j,temp,min;
for(i=0;i<size;i++){
min=i;//初始化min为0;
for(j=i+1;j<size;j++){
if(arr[min]>arr[j]){
min=j;//找到第i小
}
}
if(i!=j){//交换
temp=arr[min];
arr[min]=arr[i];
arr[i]=temp;
}
}
}
int main()
{
int i,j,n;
scanf("%d",&n);
int arr[n];
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
simpleSelectSort(arr,n);
for(j=0;j<n;j++){
printf("%d ",arr[j]);
}
}