我是靠谱客的博主 帅气犀牛,最近开发中收集的这篇文章主要介绍直接插入排序—排序系列,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

什么是直接插入排序

有的时候你会一样东西却不知道名字会很可惜。直接插入排序即将数组的第一个元素看为有序序列,第二个元素和有序序列中的元素依次对比插入适当位置,成为新的有序序列,依次操作。

直接插入排序

直接插入排序的重难点:

  • 循环条件中的变量在循环体中不能变
  • 如何找到要插入元素在有序序列中的位置,可以用while循环实现

while循环带有判断的功能,如下面的while语句

while(temp<arr[j]) {
	arr[j+1] = arr[j];
	j--;
}

看起来条件是temp<arr[j],实际上条件实现了arr[j-1]<temp<arr[j]判断,准确找到了插入元素应该插入到有序序列的位置。

直接排序实现代码:

import java.util.Arrays;

public class Demo1 {
	public static void main(String[] args) {
		int[] arr = new int[] {1,43,8,4,2,287,5};
		Math math = new Math();
		math.run(arr);
	}
}

class Math{
	public void run(int[] arr) {
		for(int i=1;i<arr.length;i++) {
			if(arr[i]<arr[i-1]) {			//牵扯循环时,循环条件中的变量在循环体中千万不能变
				int temp = arr[i];
				int j = i-1;
				while(temp<arr[j]) {
					arr[j+1] = arr[j];
					j--;
				}
				arr[j+1 ] = temp;
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

次品直接插入排序

第一次尝试时,并没有想到用while循环,使用了for循环加if判断依次将有序序列与插入元素对比。比正品多了两个循环,时间复杂多陡升,欣慰的是也能实现排序功能。

完整代码:

import java.util.Arrays;

public class Demo1 {
	public static void main(String[] args) {
		int[] arr = new int[] {1,43,8,4,2,287,5};
		Math math = new Math();
		math.run(arr);
	}
}

class Math{
	public void run(int[] arr) {
		for(int i=1;i<arr.length;i++) {
			if(arr[i]<arr[i-1]) {			//牵扯循环时,循环条件中的变量在循环体中千万不能变
				cricle(arr,i);
			}
		}
		System.out.println(Arrays.toString(arr));
	}
	public void cricle(int[] arr,int n) {
		for(int i=0;i<n;i++) {
			if(arr[n]>arr[i]&&arr[n]<arr[i+1]) {
				int temp = arr[n];
				for(int j=n;j>i+1;j--) {
					arr[j] = arr[j-1]; 
				}
				arr[i+1] = temp;
			}
		}
	}
}

最后

以上就是帅气犀牛为你收集整理的直接插入排序—排序系列的全部内容,希望文章能够帮你解决直接插入排序—排序系列所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部