算法探索_插入排序算法(简单插入排序/希尔排序)

常用的排序算法分为

  1. 交换排序 ( 冒泡排序 / 快速排序 )   https://blog.csdn.net/qq_39731011/article/details/95204290
  2. 插入排序 ( 简单插入排序 / 希尔排序 )    https://blog.csdn.net/qq_39731011/article/details/95342246
  3. 选择排序 ( 简单选择排序 / 堆排序 )   https://blog.csdn.net/qq_39731011/article/details/95457842
  4. 归并排序    https://blog.csdn.net/qq_39731011/article/details/95614787
  5. 基数排序 ( 桶排序 )    https://blog.csdn.net/qq_39731011/article/details/95995693

今天要说的是:插入排序

插入排序 顾名思义,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入

如下文中,您有别的见解,欢迎评论指正,深海谢过诸位灵长类

简单插入排序

依据深海的理解举一个简单的例子:

未排序序列是:[5,9,8,4,2]

已排序序列是:暂时没有.

第一次执行插入: 将5拿出来  放到已排序序列

执行后:

未排序序列是:[9,8,4,2]

已排序序列是:[5]

第二次执行插入: 将9拿出来, 从已排序序列从后向前扫描,发现对应的位置在5的后面

执行后:

未排序序列是:[8,4,2]

已排序序列是:[5,9]

第二次执行插入: 将8拿出来, 从已排序序列从后向前扫描,发现对应的位置在5和9的中间

执行后:

未排序序列是:[4,2]

已排序序列是:[5,8,9]

以此类推,最终排序完成

public int[] Test() {
	int[] array={5,9,8,4,2};
	int i,j,temp; //temp 正在执行插入的数
	for(i=1;i=0;j--) {
		   if (temp > array[j]) {  //顺序正确,停止探索
			   break;
		   }else{//元素后移
	    	   array[j+1] = array[j]; 
	       }
		}
		array[j+1]=temp;
	}
    return array;
}

希尔排序

希尔排序呢就是简单插入排序的升级版,

原理如下:

1.在逻辑的层面,将数组分成若干小数组,然后排序

2.之后将分组的条件更改,分组跨度变小,然后再排序

3.循环往复,直到跨度降到1时,排序整个数组.

该排序因为分组原因,相同大小的数可能顺序颠倒.所以该排序方式为不稳定排序

public static void shellSort(int[] arr) {
		for(int gap=arr.length/2; gap>0; gap/=2) { /*步长逐渐减小*/
			for(int i=gap; i=gap && temp

 

你可能感兴趣的:(算法,插入排序,插入排序算法,希尔排序,java,插入排序,java,希尔排序)