算法概念
插入排序是一种最只管的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
算法步骤
1 将第一待排序序列第一个元素看作一个有序序列,把第二个元素到最后一个元素当成是未排序序列
2 从头到尾一次扫描未排序序列,将扫描到的每个元素一次插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。
代码示例
int [] arr={5,4,3,3,2,1}; //从下标为1的元素开始选择合适的位置插入,因为下标为0的只有一个元素,默认是有序的 for(int i=1;i<arr.length;i++){ //记录要插入的数据 int tmp=arr[i]; //从已经排序的序列最右边的开始比较,找到比其小的数 int j=i; while(j>0&&tmp<arr[j-1]){ arr[j]=arr[j-1]; j--; } //存在比其小的数,插入 if(j!=i){ arr[j]=tmp; } }
例题实战(与前几篇例题一样:冒泡选择排序的例题)
package Guild; import java.util.*; public class Main2 { public static void main(String args[]) { Scanner scanner=new Scanner(System.in); int n=scanner.nextInt(); int[] str=new int[n]; for(int i=0;i<n;i++) { str[i]=scanner.nextInt(); }//存储数据 for(int i=0;i<n;i++) { int t=str[i]; int j=i; while(j>0&&str[j-1]>t) { str[j]=str[j-1]; j--; } if(j!=i) { str[j]=t; } } for(int i=0;i<n;i++) System.out.print(str[i]+" "); } }