Использование двух for
петель:
import java.util.*;
public class InsertionSort{
public static int[] doInsertionSort(int[]a){
int j=a.length;
for(int k=1;k<j;k++){
for(int i=k;i>0;i--){
if(a[i]<a[i-1]){
int temp=a[i];
a[i]=a[i-1];
a[i-1]=temp;
}
//for printing the elements while sorting..
for(int o:a)
System.out.print(o+" ");
System.out.println("");
}
}
return a;
}
public static void main(String[] args) {
int[]arr={99,77,55,33,11,88,66};
int []arra= doInsertionSort(arr);
for(int i:arra)
System.out.print(i+" ");
}
}
Использование петли for
и while
:
import java.util.*;
public class InsertionSortAgain{
public static void main(String[] args) {
int[]arr={99,77,55,33,11,88,66};
int n=arr.length,j;
for(int i=1;i<n;i++){
j=i-1;
int key=arr[j+1];
while(j>=0 && arr[j]>key){
arr[j+1]=arr[j];
j=j-1;
//for printing elements while sorting.....
for(int k :arr)
System.out.print(k+" ");
System.out.println(" ");
}
arr[j+1]=key;
}
for(int k :arr)
System.out.print(k+" ");
}
}
Я пробовал оба, и оба отлично, но я не мог получить то, что оптимизировано.
И может ли сортировка вставок быть реализована так или нет?