Java 关于排序算法概念的问题
我目前正在学习如何用Java编程,所以我要上一堂关于数据结构之类的课。最近,我们讨论了排序算法的概念,从一开始我就对整个概念感到非常困惑 我们最近接到一个关于排序算法的作业,其中一个问题如下:Java 关于排序算法概念的问题,java,sorting,Java,Sorting,我目前正在学习如何用Java编程,所以我要上一堂关于数据结构之类的课。最近,我们讨论了排序算法的概念,从一开始我就对整个概念感到非常困惑 我们最近接到一个关于排序算法的作业,其中一个问题如下: for(int a = 0; a < data.length; a++) { for(int b = 0; b < data.length; b++) { //compare data[a] to data[b], keep track of closest }
for(int a = 0; a < data.length; a++) {
for(int b = 0; b < data.length; b++) {
//compare data[a] to data[b], keep track of closest
}
}
最接近的1d对。给定一个N个实数的序列,找出值最接近的一对整数。给出了一个O(nlogn)算法。用英语描述你提出的算法
基本上,我想问的是:有没有人能向我解释一下排序算法的一般概念和它们的整体用途,并带我了解一下如何回答这个问题?你不必给我答案,我只是想获得回答这个问题所需的知识
谢谢。排序的思想是,在已排序的结构(例如数组、列表或平衡树)中,您可以在logn操作中找到s特定的元素。(例如使用数组中的二进制搜索) 如果列表未排序,则平均需要N/2个操作 虽然“logn”一词很常见,但并不十分精确,正确地说,它是“ldn”或log2(ld:logumius dualis,或logumus在基数2上)。log通常表示在base10上的log。 在计算机科学中,几乎所有的log(N)都表示log2(N) 因此,排序列表可以加快算法的速度,特别是当您需要多次搜索时 就你而言:
如果序列已排序,则通过查看序列中的上一个和下一个元素来构造候选对之一。要回答您的问题:
问题是找到两个最接近的元素,让我们看一个例子: 这个列表中最接近的两个元素是什么
data = {1,45,32,7,87,54,10};
嗯,很难通过看来判断
我们可以做的一件事是将每个元素与其他元素进行比较,如下所示:
for(int a = 0; a < data.length; a++) {
for(int b = 0; b < data.length; b++) {
//compare data[a] to data[b], keep track of closest
}
}
分类的内容如下:
{1,7,10,32,45,54,87}
通过首先对数据进行排序,找到最接近的两个元素变得容易多了,不用多久就可以看到7
和10
是最接近的两个元素
此解决方案的成本为:
O(n log n)
用于排序(请参见和),加上O(n)
用于迭代排序列表并搜索最近的两个元素
这将为您提供:
O(n日志n)+O(n)
大约是:
O(n log n)
如果您有一个未排序的数字列表[-3,-7,9,6,0],并且希望找到两个“最近的”数字,则需要计算距离:(-3,-7),(-3,9),(-3,6),(-3,0),(-7,9),(-7,6),
(-7,0), (9,6), (9,0), (6,0). 这是N!计算,当N变大时,这是相当大的
如果列表已排序,则只需计算(-7,-3),(-3,0),(0,6),(6,9)或N-1计算
当然,对列表进行排序需要付出一些代价。MergSort和QuickSort的平均值都是O(n(logn))。但是请注意,(排序时间)+(增量时间)也就是说,n(logn)+(n-1)