我正在尝试自己编程气泡排序、选择排序和插入排序。但是,我在插入排序方面遇到了麻烦。我会提供我的代码以及每行在做什么
public void sortMethod() {
int count = 1;
for (int j = 0; j < Unsorted.length - 1; j++) {
int index = 0;
if (Unsorted[count] < Unsorted[count - 1]) {
int temp = Unsorted[count];
for (int i = count; i > 0; i--) {
if (Unsorted[i] > Unsorted[count]) {
index = i;
Unsorted[i] = Unsorted[i - 1];
}
}
Unsorted[index] = Unsorted[count];
}
count = count + 1;
}
}
好的,所以int count是找出排序数组的起始位置。然后我声明了index以查找将元素放在排序数组之后的位置,并为未排序数组的第一个元素声明了一个临时int,如果它小于排序数组的最后一个元素。然后它反转数组直到第一个元素,如果它大于我要添加的元素,则为其索引分配索引。本质上是为了让我知道将其放置在哪里。然后unsorted[I]=unsorted[I-1]将排序数组从未排序数组的第一个元素所属的位置移动。然后将未排序数组的第一个元素分配给它所属的位置。每次增加计数
Array: 31 27 45 23 22 3 1 13 1 42
Array after sort: 27 1 1 3 22 23 1 1 1 42
BUILD SUCCESSFUL (total time: 0 seconds)
这是我必须更改您的代码以使其执行插入排序的最小数量,因为我知道这样的排序可以工作。请注意,您使用的整数值比必要的要多,并且有一个额外的if
在那里您不需要。我放了很多注释来反映我在修复它时的想法,因此您可以希望理解代码在做什么:
public class Test
private static int[] Unsorted = {444, 7, 22, 4, 3, 2, 1, -34, -999};
public static void sortMethod() {
// We'll consider each position in the array in order. For each round,
// 'j' is pointing at the last item in the part of the array that we know is
// correctly sorted. The first item after 'j' is the next candidate. We
// want to INSERT it into the right place in the part of the array that
// is already sorted. NOTE: The first item is never a candidate because
// an array with one element is always sorted.
for (int j = 0; j < Unsorted.length - 1; j++) {
// save off next candidate value, the first value that may be out of order
int temp = Unsorted[j + 1];
// Move all the items in the sorted part of the array that are greater
// than the candidate up one spot. We know we have room to shift up
// because we've saved off the value at the candiate position.
int i = j;
while (i >= 0 && Unsorted[i] > temp) {
Unsorted[i + 1] = Unsorted[i];
i = i - 1;
}
// Put the candidate in the hole that is left. This inserts it such
// that everything below it has a value smaller than it, and everything
// above it has a value greater than it.
Unsorted[i + 1] = temp;
// Now the array is sorted up to the position j is pointing to and one
// beyond, so we'll advance j by one position for the next round
}
}
public static void main(String[] args) {
sortMethod();
for (int i = 0 ; i < Unsorted.length ; i++)
System.out.println(Unsorted[i]);
}
}
结果:
-999
-34
1
2
3
4
7
22
444
我正在尝试写入优先级队列。对于我的排队方法,我的逻辑是: 如果列表为空,则将事务添加到链接列表中的第一个节点 如果列表不为空,请将列表中事务对象的时间值与当前对象进行比较,如果对象的时间大于链表中的对象,则将对象插入当前索引。 否则,只需将它们添加到linkedlist的最后一个元素 我通过在方法中输入4个值来测试此方法,并相应地输入200020003000。 当我尝试从列表中除名时,它给我一个空
本文向大家介绍插入排序,包括了插入排序的使用技巧和注意事项,需要的朋友参考一下 这种分类技术与卡片分类技术相似,换句话说,我们使用插入分类机制对卡片进行分类。对于这项技术,我们从数据集中拾取一个元素,并移动数据元素以放置一个位置,以便将拾取的元素插入回数据集中。 插入排序技术的复杂性 时间复杂度:最佳情况为O(n),平均情况和最差情况为O(n ^ 2) 空间复杂度:O(1) 输入输出 算法 输入-
插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。 1. 算法步骤 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一
1. 前言 本节内容是排序算法系列之一:插入排序,主要讲解了插入排序的主体思路,选取了一个待排序的数字列表对插入排序算法进行了演示,给出了插入排序算法的 Java 代码实现,帮助大家可以更好地理解插入排序算法。 2. 什么是插入排序? 插入排序(Insert Sort),是计算机科学与技术领域中较为简单的一种排序算法。 顾名思义,插入排序是通过不断插入待排序的元素完成整个排序过程。插入排序是一种很
我试图理解插入排序和选择排序之间的区别。 它们似乎都有两个组成部分:未排序列表和排序列表。它们似乎都从未排序列表中提取一个元素,并将其放在排序列表的适当位置。我看到一些网站/书籍说选择排序通过一次交换一个来实现这一点,而插入排序只是找到合适的位置并插入它。但是,我看到其他文章说了些什么,说插入排序也交换。因此,我感到困惑。有任何规范的来源吗?
插入排序 """ 插入排序核心思想 将数组分成一个有序数组和一个无序数组 每次从无序数组中提一个元素出来 插入到 有序元素的合适位置 """ from typing import List def insert_sort(arr: List) -> List: """ 插入排序 :param arr: :return: """ target =