直接插入排序—排序系列

什么是直接插入排序

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

直接插入排序

直接插入排序的重难点:

  • 循环条件中的变量在循环体中不能变
  • 如何找到要插入元素在有序序列中的位置,可以用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;
			}
		}
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_44078014/article/details/106660115