其他分享
首页 > 其他分享> > 插入排序,选择排序

插入排序,选择排序

作者:互联网

插入选择

1.插入排序

425163

选定4, [0,0]这个区间是已处理的有序区间   现在遍历[1,5]这个区间,逐渐插入已处理的有序区间

把2拿出来 与[4]比较,发现<4 ,把4挪到它后面的位置处

考察之前的4所在的位置0位是不是应该插入的地,2与这个预插入位置之前的元素比较,发现已经到头
所以0位是2正确插入的位置 插入后

245163

然后考察5 把5挖出来,看下5是否能放在2这个位置,需要和2位置前面的元素比较 发现5>前面的元素4,所以5 放进2这个位置

245163

继续考察1,把1挖出来,看下1是否能放在3号位置

与之前的2号元素比较,发现1<5,2号元素往后移动

24_563

2号位置空出来,考察2号之前的元素,发现4>1 ,说明2号位置不是最终插入位置 需要把2号之前的元素往后移动

2_4563

1号位置空出来后,考察1号位置是不是最终插入位置,发现1<1号之前的元素2 所以1号位置不是最终插入位置 继续把1号前一位元素移动到1号

_24563

此时考察0号位是不是最终插入位置,发现要比较的位置为-1号 超出范围 所以要比较的号位+1位即0号位时最终插入位置

124563

6的插入和之前的5一样

124563

把5号位的3挖出来,看下5号位是不是最终插入位置
3与5号位前一位4号位的6比较,发现小于6,所以需要把4号位的6移动到5号位

1245_6

预插入4号位,拿3与4号位前的3号位比较 发现3<5 把3号位往后移动

124_56

预插入3号位 ,与2号位比较 3<4 2号位后移

12_456

预插入2号位,与2号位前位1号位的2比较,发现3>2

终于找到了此次预插入的位即为最终插入位,over

123456

code

insertSort(int arr[],int size){
    int i,j;

    for(i=1;i<size;i++){
        int tmp=arr[i];
        for (j=i-1;j>=0;j--){
            if(arr[j]>tmp){
                arr[j+1]=arr[j];
            } else{
                break;
            }
        }
        arr[j+1]=tmp;
    }
}

选择排序

425163

minindex=0,要考察位0

逐个考察每个元素把相应位置放入相应的元素

第一轮,找到4元素位置应该放的元素,从待考察集合里找到最小的元素的元素与4交换

425163

交换

125463

第二轮:找到索引为1位置应该存放的元素,从其下一位开始考察

minindex=1,要考察位1

125463

依次考察后续位最终数组排序完成
code

void selectSort(int arr[],int size){
    int i,j;
    for(i=0;i<size;i++){
        int minIndex=i;
        for(j=i+1;j<size;j++){
            if(arr[j]<arr[minIndex]){
                minIndex=j;
            }
        }
        if(minIndex!=i){
            int tmp=arr[minIndex];
            arr[minIndex]=arr[i];
            arr[i]=tmp;
        }
    }
}

code

标签:发现,元素,插入排序,位置,选择,插入,考察,排序,号位
来源: https://blog.51cto.com/huangkui/2677753