插入排序简单来说,就是重新去遍历一组数据,然后在遍历的时候,拿正在遍历的数据和已经遍历过的数据去对比,最后按照某种特定的顺序去排序;
举个简单的例子,大家都玩过斗地主吧,我们把桌子上的牌看成是一个杂乱无序的数组;在我们斗地主的时候,我们会拿刚起的牌和手中的牌进行比较,然后把它插入到指定的位置。这就是我们的插入排序;
输入:n个数的一个序列<a₁,a₂,...,an>。
输出:输出的结果要满足排序后的结果;
java:
public static void main(String[] args) {
int[] a = { 90, 34, 5, 7, 71, 2};
insertSort1(a, a.length);
}
public static void insertSort1(int a[], int num) {
for (int i = 1; i < num; i++) {
int temp=a[i]; //复制为哨兵进行对比
int j=i-1;
while(j>=0&&temp<a[j]){
a[j+1]=a[j]; //如果要对比的数大于当前数则后移一位
j--;
}
a[j+1]=temp;
print(a);
}
}
public static void print(int a[]){
for (int i = 0; i < a.length; i++) {
if(i%6==0){
System.out.println();
}
System.out.print(a[i]+" ");
}
}
再来个JS版本的
<script>
var a=[90, 34, 5, 7, 71, 2];
insertSort(a);
function insertSort(a){
for(var i in a){
var temp=a[i] //复制为哨兵
var j=i-1; //每次递减一位进行对比
while(j>=0&&temp<a[j]){
a[j+1]=a[j]; //如果temp大于a[j]则后移一位,直到当前哨兵不再大于a[j]
j--; //找到所在的位置退出当前循环
}
a[j+1]=temp; //将temp插入到当前位置的后一位;
}
alert(JSON.stringify(a));
}
</script>