为了方便大家理解,我尽量写的浅显易懂,同时希望大家把不理解的发到评论中,我会尽所能,帮助你l理解。
欢迎qq进行交流问题:
本人QQ :1770115451 算法交流群: 1061907071
插入排序算法:
总体思路:可以把插入排序算法的过程想象成摸牌,从最底向上摸牌,摸到的牌与手里的牌 进行比较(与手里的牌中最后一张向前依次比较),如果摸到的牌,小于比较的牌,则插入到前面去,反之,放在后面去。
算法实现步骤:
1. 建立一个循环,实现从底向上摸牌的过程。
2.记录手里的牌中最后位置待比较牌的位置。
3.获取摸到的新牌
4.创建一个while循环,当有手牌时并且新手牌小于 待比较牌 ,则进行更新带比较牌的位置
5.当没有手牌的时候,或者摸到的手牌大于待比较牌时,则将新手牌放在带比较牌位置的后面。
关键代码:
//插入排序算法 public static void insertSort (int arr[]){ //1.从底向上摸牌 for(int i=0;i<arr.length;i++){ //2.记录手里的牌中最后的那个牌的位置,如果等于-1的话,说明是第一次摸牌,还没有手牌 int lastIndex = i-1; //3.获取摸到的牌 int N =arr[i]; //4.当有手牌 并且 摸到的新手牌<手牌中最后位置那张牌,则放到前面去 while(lastIndex>-1&&N<arr[lastIndex]){ arr[lastIndex+1] = arr[lastIndex]; //把最后位置的牌向后挪一个位置 lastIndex--; //更新最后一张待比较的牌的位置 } //5.当没有手牌,且 摸到的新手牌大于 最后一张待比较的牌时 :直接放到后面去 arr[lastIndex+1] = N; } printarr(arr); }