排序算法1--插入排序--直接插入排序
直接插入排序:
在日常生活中,经常碰到这样一类排序问题:把新的数据插入到已经排好的数据列中。
例如:一组从小到大排好顺序的数据列{1,2,3,4,5,6,7,9,10},通常称之为有序列,我们用序号1,2,3,…表示数据的位置,欲把一个新的数据8插入到上述序列中。
完成这个工作的步骤:
①确定数据“8”在原有序列中应该占有的位置序号。数据“8”所处的位置应满足小于或等于该位置右边所有的数据,大于其左边位置上所有的数据。
②将这个位置空出来,将数据“8”插进去。
直接插入排序(straight insertion sort)的做法是:
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
例如:
原有序表:(9 15 23 28 37) 20
找插入位置 : (9 15 ^ 23 28 37) 20
新有序表: (9 15 20 23 28 37)
java实现:
1 package 平时常用; 2 public class _1直接插入排序 { 3 public static void main(String[] args) { 4 int a[]={3,5,6,2,4,1}; 5 for(int i=1;i<a.length;i++){ 6 if (a[i] <a[i-1]) {//如果发生逆序,往前插入 7 int j,temp; 8 temp=a[i]; 9 for(j=i-1;j>=0&&temp<a[j];j--){ 10 a[j+1]=a[j]; //将大于temp的值整体后移一个单位 11 } 12 //插入到指定的位置 13 a[j+1]=temp; 14 15 } 16 } 17 18 for(int i=0;i<a.length;i++){ 19 System.out.print(a[i]); 20 } 21 } 22 }
js实现:
1 function zhijieInsertSort(a){ 2 var i,j,temp; 3 for (i = 1;i<a.length;i++) { 4 if (a[i] <a[i-1]) {//如果发生逆序,往前插入 5 temp = a[i]; 6 for (j = i-1;j>=0&&a[j]>temp;j--) { 7 a[j+1] = a[j]; 8 } 9 a[j+1] = temp; 10 } 11 } 12 } 13 var a = new Array(7,2,6,5,1,4,3); 14 zhijieInsertSort(a); 15 document.write("_1直接插入排序"+a+"<br />")
python实现:
1 def insert_sort(listNums): 2 length = len(listNums) 3 for i in range(1,length): 4 key = listNums[i] 5 j = i-1 6 while j>=0: 7 #比较 进行插入排序 8 if listNums[j] > key: 9 listNums[j+1] = listNums[j] #整体后移 10 listNums[j] = key 11 j = j-1 12 return listNums
本文来自博客园,作者:爱笑的眼睛真美,转载请注明原文链接:https://www.cnblogs.com/zhangxue521/p/6748120.html