Java 缩短冒泡排序循环
我已经更改了我的冒泡排序,因为在排序的每个步骤中,应用程序都会遍历整个列表 这是不必要的,因为在第一次遍历之后,最小的项将位于列表的末尾,而在第二次遍历之后,第二个最小的项将位于其正确的位置(倒数第二个),依此类推。我有点不确定到底需要改变什么 我需要修改冒泡排序,这样它就不会执行不必要的比较Java 缩短冒泡排序循环,java,sorting,bubble-sort,Java,Sorting,Bubble Sort,我已经更改了我的冒泡排序,因为在排序的每个步骤中,应用程序都会遍历整个列表 这是不必要的,因为在第一次遍历之后,最小的项将位于列表的末尾,而在第二次遍历之后,第二个最小的项将位于其正确的位置(倒数第二个),依此类推。我有点不确定到底需要改变什么 我需要修改冒泡排序,这样它就不会执行不必要的比较 private void bubbleSort(){ int currentCount=0; 显示状态(“排序…”); 布尔交换=真; while(互换){ 交换=假; 对于(int i=0;i
private void bubbleSort(){
int currentCount=0;
显示状态(“排序…”);
布尔交换=真;
while(互换){
交换=假;
对于(int i=0;i }//bubbleSort private void bubbleSort(){
冒泡排序将执行不必要的比较,这就是为什么您不在生产中对任何合理大小的数据集使用它的原因。特别是关于您的代码。请简单看一下(因为我不想再写一次,你只能在学校里写)看起来它做了完全相同数量的比较。如果你想要一个足够大的N的真正好的排序算法,尝试合并排序
参考文献
public static <E extends Comparable<? super E>> void bubbleSort(E[] comparable) {
boolean changed = false;
do {
changed = false;
for (int a = 0; a < comparable.length - 1; a++) {
if (comparable[a].compareTo(comparable[a + 1]) > 0) {
E tmp = comparable[a];
comparable[a] = comparable[a + 1];
comparable[a + 1] = tmp;
changed = true;
}
}
} while (changed);
}
publicstatic首先,在for循环的第一次迭代结束时,最大的元素将位于数组的末尾,而不是最小的
如果要修改代码以保存不需要的比较,可以检查上一次比较,并使用If作为下一个for循环的结束
考虑以下代码:(我希望java
allow while(int)-我不是java
expert…)
integer swap=items.length-1;
while(互换){
交换=0;
整数lastSwap=swap;
for(int i=0;i
请删除不必要的代码
integer swap = items.length - 1;
while (swap) {
swap = 0;
integer lastSwap = swap ;
for (int i = 0; i < lastSwap ; i++) {
if (greaterThan(items[i], items[i + 1])) {
swapItems(items[i], items[i + 1]);
swap = i;
currentCount++;
}
} // for
} // while