Java中的七大排序_1 插入排序

一:七种排序

插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序

二、排序思想(以非降序排列为例)

简单点说:将待排元素分为有序区间和无序区间,并假设第一个元素已经有序。每次取出无序区间的第一个值记作key吧,将它与有序区间的元素从后往前进行比较,大于等于有序区间最后一个数,就放后边当成新的有序区间的最后一个数;小于的话,就继续往前比较,直到找到一个比它还小的有序区间的数,并把key插入到该值的后边。
注意:我们在有序区间插入元素时,一定要提前空好位置在做插入操作,如果直接插入,会导致原来数据被覆盖而丢失。所以要先将插入位置之后的有序区间的元素从后往前依次向后移动一下,(从后往前,还是为了避免数据被覆盖)。这样操作后,就会将插入位置空出,此时,在将key插入

三、图示:以排18292415224为例

1.将元素分为有序区间和无序区间,并假设第一个元素已经有序

2.key从无序区间第一个开始有序的下一个),key=8大于等于有序区间最后一个数,就放后边当成新的有序区间的最后一个数,接着进行下一步的key值比较定位

3.key=2,小于有序区间的最后一个数8,就继续往前比较,直到找到一个比它还小的有序区间的数,在该数之后做插入

4.先将插入位置之后的有序区间的元素从后往前依次向后移动一下,腾出空位,插入key

5.key=9,key>=8,成为新有序区间的最后一个数
6.key=2, key<9, 向前遍历比较,直到找到一个小于等于2的数,在该数之后做腾位、再插入key=2


9.依次类推,最终将所有元素按非降序排号

四、代码实现

public static void insertSort2(int[] array) {//插入排序代码
for (int i = 0; i < array.length - 1; i++) {//循环的次数,也监控着每一轮开始key的位置
int key = array[i + 1];
int j;
for (j = i; j >= 0 && key < array[j]; j--) {//一边比较一边为key的插入腾空位
array[j + 1] = array[j];
}
array[j + 1] = key;
}
}

原文地址:https://blog.51cto.com/14234228/2434107

时间: 2024-08-02 23:05:24

Java中的七大排序_1 插入排序的相关文章

Java中的七大排序_2 希尔排序

希尔排序 简单点说:将元素进行分组,每组在进行组内的插入排序,在重新分组.排序.直到最后全部元素归为一组,做最后一次插入排序注意:将待排元素分为gap组(gap=gap/3+1),开始gap=array.length.每一组元素也不是位置连续的,而是把每组中的第一个元素连续放在一起,够gap个后在放每一组的第二个元素. 1.第一组:无序区间第一个数key=array[4]=2 2.第二组:无序区间第一个数key=array[5]=43.第三组:无序区间第一数key=array[6]=14.第四组

Java中的七大排序(上)

一般排序通常认为是升序.稳定性:两个相等的数据若在排序前后的相对位置不发生改变,则称该算法是具备稳定性的算法.一:插入排序原理: 将数组分为有序区间和无序区间,每次用无需区间的 第一个数与有序区间进行比较.时间复杂度:O(n*n),空间复杂度:O(1)稳定性:稳定 代码如下: public static void insertSort0(int[] array) { for (int i = 1; i < array.length; i++) { // 有序区间 [0, i) // 无序区间 [

java中的选择排序之降序排列

1 import java.util.Arrays;//必须加载 2 class Demo{ 3 public static void main(String []args){ 4 int[] arr={3,54,456,342,2798}; 5 System.out.println(Arrays.toString(arr));//java打印数组,排序前[3, 54, 456, 342, 2798] 6 arrSort(arr); 7 System.out.println(Arrays.toS

java中数组的排序,直接排序,冒泡排序,插入排序

1.直接排序: public static void selectSort(int[] arr) { for (int x = 0; x < arr.length - 1; x++) { for (int y = x + 1; y < arr.length; y++) { if (arr[x] > arr[y]) { int temp = arr[x]; arr[x] = arr[y]; arr[y] = temp; } } } } 说明:双重for循环,数组的第一个数a[0]和后面所有

java中各种经典排序(冒泡 选择 插入 希尔等)

1 import java.util.Arrays; 2 3 public class ArraySort { 4 public static void main(String[] args) { 5 int[] arr = { 12, 23, 14, 5, 64, 35, 42 }; 6 System.out.println("排序前:"); 7 System.out.println(Arrays.toString(arr)); 8 // bubbleSort(arr); 9 //

Java 中常见的排序算法

  其实小编是不太想写关于java的相关文章,因为是这个编程语言实在是会用的人太多了,网上的博文数不胜数,没必要在重复造轮子了,但是虽然java这门语言会用的人很多,但是会用.掌握.熟练.和精通可不是闹着玩的,想要达到精通的级别,小编敢说,一个正规的开发公司能过达到精通java的开发人员屈指可数,所以小编这里就跳过关于java哪些简单的API .语法,直接给大家介绍一些相对提升能力,并且不是那么基础的知识,说不定以后面试就会用到,尤其是排序,真的,不晓得为啥都喜欢在面试的时候出排序的题,实际大数

java中Collections.sort排序详解

Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的.compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数.equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.so

[转]java中Collections.sort排序详解

Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f,g这样,当然数字也是这样的. compare(a,b)方法:根据第一个参数小于.等于或大于第二个参数分别返回负整数.零或正整数. equals(obj)方法:仅当指定的对象也是一个 Comparator,并且强行实施与此 Comparator 相同的排序时才返回 true. Collections.

Java中Collections.sort()排序详解

第一种:Comparable 排序接口 若一个类实现了Comparable接口,就意味着"该类支持排序". 假设"有一个List列表(或数组),里面的元素是实现了Comparable接口的类",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如TreeMap)"中的键或"有序集合(Tree