1. 程式人生 > >java常見數據算法_插入排序

java常見數據算法_插入排序

分析 查找 核心 sta display find urn 找到 ava

插入排序的核心思想:
抽出一個元素,在其前面的元素中找到適當的位置進行插入。
其參考實現如下:
package com.zcp.ch04;

/**

  • @author Administrator
  • 冒泡排序的實現
    */
    public class InsertArray {

    //數組
    private long[] arr = null;

    //數組中有效數據的大小
    private int elems;
    public InsertArray() {
    arr = new long[50];
    }

    public InsertArray(int length){
    arr = new long[length];
    }

    /**

    • 插入數據的操作
    • @param value
      */
      public void insert(long value){
      arr[elems] = value;
      elems++;
      }

    /**

    • 查找指定的數據,如果能夠查找到則返回數組的坐標,否則返回-1.
    • @param value
    • @return
      */
      public int find(long value){
      int i = 0;
      for(i=0;i<elems;i++){
      if(value==arr[i])
      break;
      }

      if(i >(elems-1)){
      return -1;
      }

      return i;

    }

    /***

    • 刪除數據的操作,刪除成功返回true,刪除失敗返回false
    • @param value

      */
      public boolean delete(long value){

      int key = find(value);
      if(key == -1){
      System.out.println("刪除數據失敗,未查找到要刪除的數據");
      return false;
      }
      for (int i = key; i < elems; i++) {
      arr[i] = arr[i+1];
      }
      elems--;
      return true;

    }

    /***

    • @param oldValue
    • @param newValue
    • @return 如果修改成功返回true,修改失敗返回false
      */
      public boolean changeValue(long oldValue,long newValue){
      int key = find(oldValue);
      if(key == -1){
      System.out.println("需要修改的數據不存在,修改失敗");
      return false;
      }
      arr[key] = newValue;
      return true;
      }

    /**

    • 插入排序的算法
    • 插入一個元素,在其前面的元素中找到適當的位置進行插入
    • 分析:從插入排序的定義可以看出,插入一個元素在其前面的元素中找到合適的位置進行插入
    • 所以:我們在找這個元素的時候需要從第二個元素開始找(數組的下標為1),然後依次找後面的元素
      */
      public void insertSort(){

      long keyValue = 0;
      //這裏定義i的目的就是我們需要找的元素的坐標
      for (int i = 1; i < elems; i++) {
      //獲取到我們要查找的一個元素
      keyValue = arr[i];
      int j = 0;
      for (j = i; ((j > 0) && (arr[j-1] > keyValue)); j--) {
      //通過裏面的判斷arr[j-1]>keyValue 的值的時候,將整體右移,空出最左邊的位置
      arr[j] = arr[j-1];
      }
      //將選擇的數據插入到最左邊
      arr[j] = keyValue;
      }

    }

    /**

    • 該方法主要是變量數組並顯示
      */
      public void disPlay(){
      for (int i = 0; i < elems; i++) {
      System.out.print(arr[i]+ " " );
      }
      System.out.println();
      }

}
測試Demo如下:
package com.zcp.ch04;

public class TestInsertMain {

public static void main(String[] args) {

    InsertArray bubbleArray = new InsertArray();
    bubbleArray.insert(10);
    bubbleArray.insert(500);
    bubbleArray.insert(80);
    bubbleArray.insert(2);
    bubbleArray.insert(23);

    bubbleArray.disPlay();

    bubbleArray.insertSort();;;
    System.out.println("選擇排序後的數據如下:");
    bubbleArray.disPlay();
}

}

java常見數據算法_插入排序