往有序的系列中插入一个元素,对于长度为len 数组,开始的 0 号元素是有些的,从第1 号元素开始,进行插入到前面有序的系列中
跟前面有序元素对比无序则立即插入排序
- int[] data = {0,5,4,8,9,3,2,67,23};
- int len = data.length;
-
- for(int start_index = 1;start_index <= len -1;start_index++){
- int insert_data = data[start_index];
- for(int i = start_index -1;i >=0;i--){
- if(data[i]>insert_data){
- data[i+1]=data[i];
- }else{
- data[i+1]=insert_data;
- break;
- }
- }
- }
- }
找到插入索引i+1 ,再一次性移动元素
-
- int[] data = {0,5,4,8,9,3,2,67,23};
- int len = data.length;
-
- for(int start_index = 1;start_index <= len -1;start_index++){
- for(int i = start_index -1;i >=0;i--){
- if(data[start_index] > data[i] ){
- //i+1 ~ start_index
- if(i+1 == start_index)break;
-
- int tmp = data[start_index];
-
- for(int j = start_index -1; j >= i+1;j--){
- data[j+1]=data[j];
- }
- data[i+1] = tmp;
-
- break;
- }
- }
- }
- }
写希尔排序,直接将简单排序下表对用修改,发现这里少了一个逻辑判断,也就是当有序元素跟下一个比较元素相比都是逆序的,此时需要将第0个元素赋值为插入元素
if(i == 0) data[i]=insert_data;
-
- for(int start_index = 1;start_index <= len -1;start_index++){
- int insert_data = data[start_index];
- for(int i = start_index -1;i >=0;i--){
- if(data[i]>insert_data){
- data[i+1]=data[i];
- }else{
- data[i+1]=insert_data;
- break;
- }
- if(i == 1) data[i]=insert_data;
- }
- }