Java 插入排序

插入排序和前面两种有点不同啦。插入排序有比较,移动的动作,插入排序分为已排序部分和待插入部分,将待插入数据与有序部分比较,遍历有序部分,找到第一个比插入数据的位置,插入数据,再移动插入位置之后的数据。

比较、插入、移动数据,移动还是有点麻烦的

public class InsertOne {

    /**
     * @author chengdu
     * @param args
     */
    private int[] array;

    public void setArray(int[] array){
        this.array = array;
    }
    public int[] getArray(){
        return array;
    }

    public void insertOneMove(int x, int y){  // y > x
        if(x > array.length || y > array.length){
            System.out.println("数组越界");
        }else{
               if(array[x] > array[y]){
                    int temp = array[x];
                    array[x] = array[y];
                    for(; y > x + 1 ; y--){
                        array[y] = array[y-1];
                    }
                    array[x+1] = temp;
               }
            }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        InsertOne insertone = new InsertOne();
        int[] testarray = {1,2,7,4,5,6,3,8};
        insertone.setArray(testarray);
        insertone.insertOneMove(2, 6);
        System.out.println(Arrays.toString(testarray));
    }

}

插入排序

public class InsertSort {

    /**
     * @author chengdu
     * @param args
     */
    private InsertOne insertone;

    public void setInsertone(InsertOne insertone){
        this.insertone = insertone;
    }
    public InsertOne getInsertone(){
        return insertone;
    }

    public void insertSortMethod(int[] array){
        int pos;
        int lenarray = array.length;
        insertone.setArray(array);
        for(pos=1; pos < lenarray; pos++){
            System.out.println("次数---------:"+pos);
            for(int i=0; i < pos; i++){
                insertone.insertOneMove(i, pos);
            }
            //输出已经排好顺序的部分
            for(int i=0; i < pos+1; i++){
                System.out.println(array[i]);
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        InsertOne insertone = new InsertOne();
        InsertSort insertsort = new InsertSort();
        insertsort.setInsertone(insertone);
        int[] array = {9, 1, 6, 3, 4, 2, 5, 13, 15, 10};
        insertsort.insertSortMethod(array);
        System.out.println("---------顺序-----------------");
        for(Integer i : array){
            System.out.println(i);
        }
    }

}

运行

次数---------:1
1
9
次数---------:2
1
6
9
次数---------:3
1
3
6
9
次数---------:4
1
3
4
6
9
次数---------:5
1
2
3
4
6
9
次数---------:6
1
2
3
4
5
6
9
次数---------:7
1
2
3
4
5
6
9
13
次数---------:8
1
2
3
4
5
6
9
13
15
次数---------:9
1
2
3
4
5
6
9
10
13
15
---------顺序-----------------
1
2
3
4
5
6
9
10
13
15

时间: 2024-12-28 17:28:31

Java 插入排序的相关文章

java插入排序

一.基本概念 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的.个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2).是稳定的排序方法.插入算法把要排序的数组分成两部分:第一部分包含了这个数组的所有元素,但将最后一个元素除外(让数组多一个空间才有插入的位置),而第二部分就只包含这一个元素(即待插入元素).在第一部分排序完成后,再将这个最后元素插入到已排好序的第一部分中. 二.java代码实现 public class InsertSort { pu

排序算法之 Java插入排序算法

package net.qh.test.sort; import java.util.ArrayList; import java.util.Calendar; import java.util.List; /** * Created by Administrator on 2016/03/01. */ public class Insert { public int[] sort(int[] arr){ if ( arr == null || arr.length <= 1 ){ return

java插入排序的实现

//Simple insertion sort public static void insertionSort(Object obj){ for(int p=1;p<obj.length;p++){ Object temp=a[p]; //记住p位置的数组值 int j=p; //记住p位置 for(;j>0&&temp.compareTo(a[j-1])<0;j--){ //依次向前比较 a[j]=a[j-1]; } } }

5 Java 插入排序

1.基本思想 将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小则依次交换,直到出现比选择元素小的元素或者全部元素都比较过为止. 2.算法描述 ①. 从第一个元素开始,该元素可以认为已经被排序: ②. 取出下一个元素,在已经排序的元素序列中从后向前扫描: ③. 如果该元素(已排序)大于新元素,将该元素移到下一位置: ④. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置: ⑤. 将新元素插入到该位置后 ⑥. 重复步骤②~⑤ 3.代码实现 原数组:10, 1,

7种基本排序算法的Java实现

7种基本排序算法的Java实现 转自我的Github 以下为7种基本排序算法的Java实现,以及复杂度和稳定性的相关信息. 以下为代码片段,完整的代码见Sort.java 插入排序 1 /** 2 * 直接插入排序 3 * 不稳定 4 * 时间复杂度:O(n^2) 5 * 最差时间复杂度:O(n^2) 6 * 空间复杂度:O(1) 7 * 使用场景:大部分元素有序 8 * @param elements 9 * @param comparator 10 * @param <T> 11 */ 1

Hark的数据结构与算法练习之插入排序

算法说明: 先是拿语言进行一下描述: 假如是做降序排序,那么从头开始扫描每个数字,使每个数字与它前面的若干数字进行比较,直接找到小于当前数字a(当前数字以a代替)的数字b(小于a的数字以b代替). 然后将数字a插入到数学b的位置.将数字b到数字a前一位的数字向后移动一位. 至此,排序结束. 语言表述其实懂这个算法的人能会懂,不懂这个算法的人不太容易看懂,所以还是以例子做一下说明: 例如有一个数组int[] arrayData = { 5, 9, 6, 7, 4, 1, 2, 3 ,8},一共9个

Java学习 (七)、数组,查找算法,二分查找法,冒泡排序,选择排序,插入排序

一.常用数组查找算法 工作原理:它又称为顺序查找,在一列给定的值中进行搜索,从一端的开始逐一检查每个元素,知道找到所需元素的过程. 例1:查找指定的数在数组中出现的位置,找到返回下标,找不到返回-1 1 import java.util.Scanner; 2 public class LinearSearch{ 3 public static void main(String []argas) 4 { 5 int [] array={10,100,90,65,80,92}; 6 System.o

【算法拾遗(java描述)】--- 插入排序(直接插入排序、希尔排序)

插入排序基本思想 每次将一个待排序的记录按其关键字大小插入到前面已经拍好序的子文件的适当位置,直到全部记录插入完成为止. 直接插入排序 基本思想 直接插入排序的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的有序表.即假设待排序的记录存放在数组R[1······n]中,排序过程中,R被分成两个子区间R[1······i]和R[i+1······n],其中,R[1······i]是已经排好序的有序区:R[i+1······n]是当前未排序的部分.将当前无序区的第一个记录R[i+1]插

java面向对象的冒泡排序,选择排序和插入排序的比较

这三种排序有俩个过程: 1.比较俩个数据. 2.交换俩个数据或复制其中一项. 这三种排序的时间级别 冒泡排序:比较 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2 交换  0——N2/2 = N2/4 总时间 3/4*N2 选择排序:比较 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2 交换  0——3*(N-1)=3*(N-1)/2=3/2*N 总时间 N2/2+3/2*N 插入排序:第一轮最多比较一次,第二轮最多比较俩次,最后一轮比较N-1