插入排序法算长度为10的数组

插入排序法的原理;

通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置并插入。对于给定的一组记录,初始时假定第一个记录自成一个有序序列,其余记录为无序序列。接着从第二个记录开始,按照记录的大小依次将当前处理的记录插入到其之前的有序序列中,直到最后一个记录插到有序序列中为止。

具体;

假定Lenght是数组A的长度,

首先假设第一个元素被放置在正确的位置上,这样仅需从1到Lenght-1范围内对剩余元素进行排序。

对于每次遍历,从0 到i-1范围内的元素已经是有序的。

每一次从0 到 i 的遍历:通过扫描前面已排序的子列表,找到相应的位置并插入。

import java.util.Random;
public class insertion {
    public static void main(String[] args) {
            Random rd=new Random();
            //遍历数组
            int [] data = new int[10];
            for (int i = 0; i <data.length ; i++) {
                data[i]=rd.nextInt(100);
            }
            for (int i = 0; i <data.length ; i++) {//遍历输出未排序前的数组
                System.out.print(data[i]+" ");
            }
                System.out.println();
                //它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,                                                                 //找到相应位置并插入。
            for (int i = 0; i <data.length-1 ; i++) {
                //设置第i个元素是哨兵,从第i个元素之前的元素都是以排好序,将第i+1位置的元素插入//已排序的序列中
                //从第i个位置向前遍历,找到temp插入合适位置
                int pos=i;//哨兵位置
                int temp=data[pos+1];//temp待排序的数据
                for(;pos>=0&&data[pos]>temp;pos--) data[pos+1]=data[pos];
                //pos位置就是插入temp值的位置
                //计算插入位置的最后一步多减的1加回
                data[++pos]=temp;
            }
            for (int i = 0; i <data.length ; i++) {//遍历输出排序后的数组
                System.out.print(data[i]+" ");

            }
        }
    }


猜你喜欢

转载自blog.csdn.net/zhangmy12138/article/details/81174395