更多排序算法,请点击下面的链接
https://www.itqiankun.com/article/
插入排序原理
- 从第一个元素开始,该元素可以认为已经排好序。
- 取出下一个新元素,然后把这个新元素在已经排好序的元素序列中从后往前扫描进行比较。
- 如果该元素(已排序) 大于新元素,则将这个已排序的元素移到下一个索引位置。
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置。
- 将新元素插入到该已排序的元素的索引位置后面。
- 重复步骤2~5
插入排序例子
然后就是第二次插入排序,此时的数据的顺序是6,5,7,3,然后就是开始第二个数据5,然后就把5这个数据和前面已经排好的顺序进行比较,此时的排好的数据就是6,所以此时就是6和5进行比较,因为5小于6,所以此时就会把5就会跑到6的前面,所以此时的结果就是5,6,7,3
然后就是第三个数据7,此时的数据的顺序已经变成了5,6,7,3,然后就会把7和前面已经排好的顺序进行比较,此时的排好的数据就是5,6,首先是7和6比(为什么7和6先比呢,因为此时如果7和6比大的话,那么就不需要在和6前面的5比较了,因为5和6是已经排序好了的),然后比较之后发现7比6大,所以此时就不需要变了,所以此时的结果就是5,6,7,3
然后就是第四个数据3,此时的数据的顺序已经变成了5,6,7,3,然后就会把3和已经排好的数据5,6,7进行比较,首先是3和7比较,因为3比7小,所以此时顺序就是5,6,3,7,然后就是3和6比较,因为3比6小,所以此时顺序就是5,3,6,7,然后就是3和5比较,因为3比5小,所以此时的顺序就是3,5,6,7
使用代码讲解上面的例子
@Test public void hello() {
int[] arr = {
6, 5, 7, 3}; System.out.println("排序之前:"); for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " "); } // 直接插入排序 insertSort(arr); System.out.println(); System.out.println("排序之后:"); for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " "); } } / * 直接插入排序 */ private void insertSort(int[] arr) {
int j; // 已排序列表下标 int t; // 待排序元素 for (int i = 1; i < arr.length; i++) {
if (arr[i] < arr[i - 1]) {
t = arr[i]; // 赋值给待排序元素 for (j = i - 1; j >= 0 && arr[j] > t; j--) {
arr[j + 1] = arr[j]; // 从后往前遍历已排序列表,逐个和待排序元素比较,如果已排序元素较大,则将它后移 } arr[j + 1] = t; // 将待排序元素插入到正确的位置 } } }
能看到这里的同学,就帮忙右上角点个赞吧,Thanks♪(・ω・)ノ
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206422.html原文链接:https://javaforall.net
