1、原理
选择排序:就是认定最小值为数组首个;设置索引为0;外层为数组全部长度;内层是外层数之后的所有数的遍历;依次循环,发现小的之后,索引换为内部的数;最后判断最小值是否为最初设置的索引,不是则替换,是则不作改动。
下面是图片示意:
外部循环为:默认最小指针;
内部循环为:从最小指针开始到末尾,寻找下一个最小指针并记录,完成交换。
2.代码展示:
#include<stdio.h>
int main()
{
int x,y,z,index,tmp;
int arr[]={2,1,5,4};
int length = sizeof(arr)/sizeof(arr[0]);
for(x=0;x<length-1;x++){
index = x;
for(z=x;z<length;z++){
if(arr[x]>arr[z]){
index = z;
}
}
if(index != x){
tmp = arr[index];
arr[index] = arr[x];
arr[x] = tmp;
}
}
3.复杂度分析
通过发现,每一次loop要遍历n-1次,如果有n个则需要遍历
(n-1)+(n-2)+….+1次;即需要∑n−1i=1(n−i) 次;为n(n-1)/2,复杂度为O( n2 )
最好情况和最差情况:所有都排好序或者没排好序,都是O( n2 )