1. 程式人生 > >Java程式碼 插入排序

Java程式碼 插入排序

說好的每天都更的,我來了哈哈,今天寫的是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; } }