排序算法之简单选择排序

来源:互联网 发布:什么是微观数据 编辑:程序博客网 时间:2024/05/01 11:06
A,简单选择排序:每次从剩余待排序元素中找出最小元素与第一个元素交换。执行n-1趟后,结果为升序排序。
B,算法原理:
1)假设数组长度为n,取i依次取0,1,...,n-2,每次找出数组中从i到n-1的最小数min;
2)然后将min与i对应的元素交换,直到i=n-1时排序结束,所有元素即为升序排序。
下图为一组乱序数组的排序过程:

排序算法之简单选择排序
C,算法实现:
#include "iostream"

using namespace std;

 int main()

{

        void sort(int[], int);

        int array[] = {3,2,4,9,1,5,7,6,8};

        int n = sizeof(array)/sizeof(int*);

        sort(array, n);

        for(int i = 0; i < n; ++i)

                  cout<<array[i]<<" ";

        cout<<endl;

        return 0;

}

//简单选择排序

//array为测试数组,n为数组长度

void sort(int array[], int n)

{

        int temp,min;

        for(int i = 0; i < n - 1; ++i)

        {

                  min = i;

                  //循环找出剩余元素中最小的一个

                  for(int j = i + 1; j < n; ++j)

                  {

                           if(array[min] > array[j])

                           {

                                    min = j;

                           }

                  }

                  //将最小值与第一个元素交换位置

                  if(min != i)

                  {

                           temp = array[i];

                           array[i] = array[min];

                           array[min] = temp;

                  }

        }

}

运行结果:

排序算法之简单选择排序

D,复杂度分析

(a)时间复杂度:

  1)整个过程当中简单选择排序需要比较的次数与初始状态无关,总的比较次数为1+2+3+...+n-1=n(n-          1)/2,所以进行比较的时间复杂度为O(n^2);

  2)如果初始数组为降序排序,则需要进行n-1次交换,所以进行交换操作的时间复杂度为O(n)。

(b)空间复杂度:程序中定义了两个变量temp和min,所以空间复杂度为O(1)。

0 0
原创粉丝点击