数组排序的区别

时间:2014-02-08 14:27:08

标签: java arrays sorting

我学会了两种排序数组的方法:

冒泡排序:

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] +" ");
        }
    }
}

从逻辑上讲,这两种方法有什么区别?它们的用途是什么,哪个更快更有效?

3 个答案:

答案 0 :(得分:1)

Selection Sort

选择排序是重复拾取最小元素并将其放入正确的位置:

找到最小的元素,并将其放在第一个位置。 找到下一个最小元素,并将其放到第二个位置。 重复,直到所有元素都处于正确的位置。

复杂性О(n ^ 2)

Bubble Sort

冒泡排序会重复比较相邻的元素对,并在必要时进行交换。

扫描阵列,如果它们不是相对顺序,则交换相邻的元素对。这最大限度地影响到最后。 再次扫描阵列,冒出第二大元素。 重复,直到所有元素都按顺序排列。

复杂性О(n ^ 2)

(最佳情况)是 O(n)

答案 1 :(得分:0)

选择排序比冒泡排序更快。 他们俩都有:

  1. 最差时间复杂度:O(n 2
  2. 比较次数:O(n 2
  3. 最佳案例时间复杂度
    • 冒泡排序:O(n)
    • 选择排序:O(n 2
  4. 平均病例时间复杂度
    • 冒泡排序:O(n 2
    • 选择排序:O(n 2

答案 2 :(得分:0)

这两种排序都是二次的,所以它们只能用于小数组。冒泡排序对于任何语言的编码都是微不足道的,并且取决于你如何进行比较,它通常是稳定的(当相等时不会交换两个值。)选择排序可能会快一点,但不稳定。例如,当您有一个二维数组要首先按一列排序,然后另一列排序时,稳定性就会发挥作用。完成第二次排序并且两个值相等时,将不再对第一列进行排序。互联网上有很多例子和演示。