以前对直接选择排序和简单插入排序总是混淆,今天分辨一下:
直接选择:将index为0 的值记为large,遍历比较从1到n的元素,选出最大或最小的那位,和0比较,看是否交换,然后循环继续
index为1,直到结束。
for(index=0;index<n;index++){
large=x[index];
INDEX=index;
for(j=n-1;j<i;j--){
large=x[j]>x[j-1]?x[j]:x[j-1];
INDEX=x[j]>x[j-1]?j:j-1;
}
x[INDEX]=x[i];
x[index]=large;
}
简单插入排序:从数组的0 ,1开始出发
对比两个的大小,排序,往后移一个位置,将新的元素与已排序的进行比较,然后插进去。也就是说拿一个未知的值与已排序的数组列进行比较,而直接选择的不同是,不需要去比较已排序的数组,而是比较未知的数据,选择最大的。
for(int i=1;i<n;i++){
hold=x[i];
for(int k=i-1;(k<0)&&(x[k]>x[i]);k--){
list[k+1]=list[k];
}
list[k+1]=hold;
}
这两者的排序效率均比冒泡排序高