思路分析:核心思想為:把無序數(shù)組的第一個(gè)元素當(dāng)成有序數(shù)組,每次往后面(第二個(gè)元素開始)拿一個(gè)元素,把它與有序數(shù)組重新排序成有序數(shù)組,直到拿到最后一個(gè)元素為止. 注意:升序就是假定有序數(shù)組為升序來求解的,降序是假定有序數(shù)組是降序來求解的 int[] a={1,77,66,3,20};以a數(shù)組為例,可以得到如下所示的表
所以往后拿元素的總次數(shù)(外層循環(huán))為數(shù)組長(zhǎng)度-1次,重新排序的次數(shù)(內(nèi)層循環(huán))為i+1次 準(zhǔn)備工作 //insertion sorter是插入排序的意思
//準(zhǔn)備工作
int[] a={-111,77,3,4,5,99,55};
// int[] a={1,2,3,4,5,55,99};
// int[] a={999,33,21,17,9,4,1};
System.out.println("需要排序的原數(shù)組a如下所示:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}
System.out.println();//換行A.升序1.核心代碼 //升序(假定有序數(shù)組為升序)
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j>0; j--) {
//j取不到0是因?yàn)橹匦屡判虻拇螖?shù)為i+1次
if(a[j]<=a[j-1]){
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}else{
break;//比最后一個(gè)元素(有序數(shù)組)還要大,就不用判斷了,因?yàn)闊o需移動(dòng)
}
}
}
System.out.println("排序后的原數(shù)組a(升序排列如下所示:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}2.運(yùn)行截圖
B.降序1.核心代碼: // 降序(假定有序數(shù)組為降序)
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j>0; j--) {
//j取不到0是因?yàn)橹匦屡判虻拇螖?shù)為i+1次
if(a[j]>=a[j-1]){
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}else{
break; //比最后一個(gè)元素還要小(有序數(shù)組),就不用判斷了,因?yàn)闊o需移動(dòng)
}
}
}
System.out.println("排序后的原數(shù)組a(降序)排列如下所示:");
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+"\t");
}2.運(yùn)行截圖
|
|
|