Java程式碼 插入排序
阿新 • • 發佈:2019-01-08
說好的每天都更的,我來了哈哈,今天寫的是Java程式碼實現插入排序
插入排序的思想
1、每次將待排序的資料,按照關鍵字的大小和之前的有序序列進行比較,找到合適的位置將其插入
Java程式碼如下:
package sort;
//插入排序 2015-05-29
public class InsertSort {
//第一種 完全按照插入排序的定義來寫;
/*public void Insert1(int a[],int n){
int i,j,k;
//迴圈,從陣列的第二個數開始比較
for(i=1;i<n;i++){
//找到比a[i]小的數,即找到合適a[i]的位置
for(j=i-1;j>=0;j--){
if(a[j]<a[i])
break;
}
//將a[i]放進去
if(j!=i-1){
int temp=a[i];
for(k=i-1;k>j;k--){
a[k+1]=a[k];
}
a[k+1]=temp;
}
}
}*/
//第二種方法,對程式碼進行優化,將搜尋和後移合併,即每次都將a[i]和a[i-1]比較
//如果a[i]>a[i-1]說明不用移動,a[0...i]為有序數列
//否則就另j=i-1;一邊將資料後移一遍=邊向前搜尋
// public void Insert2(int a[],int n){
// int i,j;
// for(i=1;i<n;i++){
// if(a[i]<a[i-1]){
// int temp=a[i];
// for(j=i-1;j>=0&&a[j]>temp;j--){
// a[j+1]=a[j];
// }
// a[j+1]=temp;
// }
// }
// }
//第三種,程式碼優化,用資料交換代替資料後移,如果a[j]>a[j-1]不做任何變化,如果a[j]<a[j-1]
//交換a[j-1]和a[j],然後j--
public void Insert3(int a[],int n){
int i,j;
for(i=1;i<n;i++){
for(j=i-1;j>=0 &&a[j]>a[j+1];j--){
swap(a,j,j+1);
}
}
}
//交換方法
public void swap(int a[],int p,int q ){
int k;
k=a[p];
a[p]=a[q];
a[q]=k;
}
}