我学会了两种排序数组的方法:
冒泡排序:
import java.io.*;
class bubbles
{
int ctr;
int ctr1;
int a[]= new int[5];
int pos;
int temp;
int max;
public void method () throws IOException
{
int max=0;
BufferedReader obj= new BufferedReader (new InputStreamReader (System.in));
System.out.println ("Enter five numbers");
for (ctr=0; ctr<5; ctr++)
{
a[ctr]= Integer.parseInt (obj.readLine ());
}
for (ctr=0; ctr<5; ctr++)
{
for (ctr1=1; ctr1<4; ctr1++)
{
if (a[ctr1]>a[ctr1+1])
{
temp=a[ctr1];
a[ctr1]=a[ctr1+1];
a[ctr1+1]=temp;
}
}
}
for (ctr=0; ctr<5; ctr++)
{
System.out.print (a[ctr1] +" ");
}
}
}
选择排序:
import java.io.*;
class selectionprocess
{
int ctr;
int ctr1;
int a[]= new int[5];
int pos;
int temp;
int max;
public void method () throws IOException
{
int max=0;
BufferedReader obj= new BufferedReader (new InputStreamReader (System.in));
System.out.println ("Enter five numbers");
for (ctr=0; ctr<5; ctr++)
{
a[ctr]= Integer.parseInt (obj.readLine ());
}
for (ctr=0; ctr<5; ctr++)
{
max=a[ctr];
pos=ctr;
for (ctr1=ctr+1; ctr1<5; ctr1++)
{
if (a[ctr1]>max)
{
max=a[ctr1];
pos=ctr1;
}
}
temp=a[pos];
a[pos]=a[ctr];
a[ctr]=temp;
}
for (ctr=0; ctr<5; ctr++)
{
System.out.print (a[ctr] +" ");
}
}
}
从逻辑上讲,这两种方法有什么区别?它们的用途是什么,哪个更快更有效?
答案 0 :(得分:1)
选择排序是重复拾取最小元素并将其放入正确的位置:
找到最小的元素,并将其放在第一个位置。 找到下一个最小元素,并将其放到第二个位置。 重复,直到所有元素都处于正确的位置。
复杂性О(n ^ 2)
冒泡排序会重复比较相邻的元素对,并在必要时进行交换。
扫描阵列,如果它们不是相对顺序,则交换相邻的元素对。这最大限度地影响到最后。 再次扫描阵列,冒出第二大元素。 重复,直到所有元素都按顺序排列。
复杂性О(n ^ 2)
(最佳情况)是 O(n)
答案 1 :(得分:0)
选择排序比冒泡排序更快。 他们俩都有:
答案 2 :(得分:0)
这两种排序都是二次的,所以它们只能用于小数组。冒泡排序对于任何语言的编码都是微不足道的,并且取决于你如何进行比较,它通常是稳定的(当相等时不会交换两个值。)选择排序可能会快一点,但不稳定。例如,当您有一个二维数组要首先按一列排序,然后另一列排序时,稳定性就会发挥作用。完成第二次排序并且两个值相等时,将不再对第一列进行排序。互联网上有很多例子和演示。