插入排序可以很好的解释成:在玩扑克整理手牌时,先拿起一张牌放入左手,之后的牌与左手的牌依次从右至左进行比较大小按序排列。
以下是java实现插入排序的代码
public class insertion_sort {
public static ArrayList<Integer> insertion_sort_asc(ArrayList<Integer> a){
// 插入排序的(升序版)java实现
for(int j=1;j<a.size();j++){
int key = a.get(j);
int i = j-1;
while(i>=0&&a.get(i)>key){
a.set(i+1, a.get(i));
i=i-1;
}
a.set(i+1, key);
}
return a;
}
public static ArrayList<Integer> insertion_sort_des(ArrayList<Integer> a){
// 插入排序的(降序版)java实现
for(int j=1;j<a.size();j++){
int key = a.get(j);
int i = j-1;
while(i>=0&&a.get(i)<key){
a.set(i+1, a.get(i));
i=i-1;
}
a.set(i+1, key);
}
return a;
}
public static void main(String[] args) {
ArrayList<Integer> a = new ArrayList<Integer>();
ArrayList<Integer> b = new ArrayList<Integer>();
//从控制台获取要排序的数,“#”键结束
Scanner sc = new Scanner(System.in);
while(sc.hasNextInt()){
if(sc.equals("#")){
break;
}
a.add(sc.nextInt());
}
a = insertion_sort_asc(a);
System.out.print("升序排序后:");
for(int i=0;i<a.size();i++){
System.out.print(a.get(i)+" ");
}
System.out.println("");
System.out.print("降序排序后:");
for(int i = 0;i<insertion_sort_des(a).size();i++){
System.out.print(insertion_sort_des(a).get(i)+" ");
}
}
}
一般来说,我们按最坏情况来评定一个算法的效率,比如插入排序的运行时间是,忽略低次项以及最高项的系数,插入排序的最坏情况时间代价为
。举个例子,
就可以表示为