java常见数据算法_插入排序

插入排序的核心思想:
抽出一个元素,在其前面的元素中找到适当的位置进行插入。
其参考实现如下:
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();
}

}

相关文章
相关标签/搜索