排序算法之--选择排序

为了准备秋招 从今天开始复习数据结构。排序是数据结构最为重要的一部分,计算机系统都实现了各种排序算法以供系统和用户使用。

   选择排序的核心思想是这样的,先找到数组中最小的一个元素,和数组的第一个元素交换位置,其次在剩下的数组中找到最小的元素,把它和位于数组第二位的元素交换位置。如此往复,知道将整个数组都进行了排序。这种排序方法叫做选择排序。以下是算法实现。

  

public class Chose
{
    public static boolean less(Comparable a,Comparable b)
    {
       return a.compareTo(b)<0;
    }
    public static void exch(Comparable[] a,int i,int j)
    {
        Comparable v=a[i];
        a[i]=a[j];
        a[j]=v;
    }
    public static void sort(Comparable[] a)
    {
        for(int i=0;i<a.length;i++)
        {
            int min=i;
            for(int j=i+1;j<a.length;j++)
            {
                if(less(a[j],a[min]))
                {
                    min=j;
                }
            }
           exch(a,i,min);
        }
    }
}

从程序中我们不难看出该算法的事件复杂度是是O(n2),空间复杂度为O(1)。

选择算法的缺点:

    运行时间按和输入无关。为了找出最小元素而扫描一遍数组并不可以为下一次扫描提供什么有用的信息。一个有序的数组和一个元素随机排列的数组所用的排序时间一样长。

排序算法的优点:

 数据移动是最少的。每次交换都会改变两个数组元素的值。一次选择排序用了N次交换。交换次数和数组的大小是线性关系。

猜你喜欢

转载自blog.csdn.net/gottawangzi/article/details/81607815