简单选择排序有多简单?
简单到一句话描述:只需要在待排序序列找到最小元素放到已排序序列后方!
简单选择排序的步骤
- 一个乱序数组,最小元素初始化为第一个元素
- 在待排序数组中找到最小的元素与他(第一个元素)进行交换
- 交换后前面就是有序数组,后面数组继续上面操作
简单选择排序图示
简单选择排序代码实现
C语言代码实现,使用两层for循环进行选择最小值排序
//交换两数
void swap(int *a,int *b){
int t=*a;
*a=*b;
*b=t;
}
void selectSort(int arr[],int n){
for(int i=0;i<n-1;i++){
//选待排序数组第一个元素为 最小元素
int minIndex=i;
//循环剩下元素,找到全部数组对应的最小元素
for(int j=i+1;j<n;j++){
if(arr[j]<arr[minIndex]){
minIndex=j;
}
}
//交换最小值和第一个元素
swap(&arr[i],&arr[minIndex]);
}
}
总结
- 时间复杂度:O(n^2)
- 空间复杂度:O(1)
- 两层循环所以要n^2的时间复杂度,不需要额外空间所以为O(1)