深入浅出理解排序算法之-选择排序
#include <iostream>
/* 选择排序
基本思想:从后面每次找到最小的一位放到前面已排序好的最后一位
特点:时间复杂度O(n^2)
*/
void SelectSort(int array[],int n){
int i,j;
int temp =0,flag =0;
for (i =0; i < n -1; i++) {
temp = array[i];
flag = i;
for (j = i+1; j < n; j++) {
if (array[j] < temp) { //取从i+1~n-1的最小一位放入temp
temp = array[j];
flag = j;
}
}
// 避免自身赋值,极端样例 1,2。3。4,5已经有序
if (flag != i) {
array[flag] = array[i]; // a[i]的值放到flag
array[i] = temp; // a[i]的值等于i+1~n-1的最小一位(temp)
}
}
}
int main(int argc,constchar * argv[])
{
int i =0;
int a[] = {5,4,9,8,7,6,0,1,3,2};
int len =sizeof(a)/sizeof(a[0]);
// 选择排序
SelectSort(a, len);
for (i =0; i < len; i++) {
printf("%d ",a[i]);
}
printf("\n");
return0;
}