数据结构与算法之排序算法---简单选择排序

数据结构与算法之排序算法—简单选择排序

  • 简单选择排序的基本思想
  • 完整实现代码
  • 复杂度分析

2016年10月18日15:54:57 by:piaxiaohui

简单排序的基本思想

简单选择排序:先选择一个关键字,然后进行比较,找到合适的关键字再做交换,并且只移动一次。冒泡排序的思想就是不断地(相邻两个元素)交换,通过交换完成最终的排序。

简单选择排序就是每一趟在n-i+1(i=1,2,….,n-1)个记录中选取关键字最小的记录作为有序序列的第i个记录。

完整代码实现

@requires_authorization
#include 

using namespace std;


//功能函数:实现数组元素的交换功能
void swap( int a[], int i , int j){

    int temp = a[i];
    a[i] = a[j];
    a[j] = temp;
}



//功能函数:实现数组的打印功能
void printArray( int a[],int length){


    for( int i = 0; i < length; i++){


        cout << a[i] << " ";
    }

    cout << endl;

}

//核心函数:简单选择排序算法的实现
void SelectSort( int a[], int length){

    int min;
    for( int i = 0; i < length-1; i++){

        min = i;
        cout << "第"<"趟排序后的序列为:"<for( int j = i+1; j<=length-1 ; j++){

            if( a[min]  > a[j]){

                min = j;
            }


        }
        //注意这里是在内部for循环结束后才做比较
        if( min != i){

                swap(a,i,min);
            }
        printArray(a,length);

    }

}



int main(){

    int a[10]={1,3,5,7,9,0,2,4,6,8};
    int length = 10;
    cout<<"数组排序前为:"<cout <<"数组排序后为:"<return 0;
}

运行结果:
数据结构与算法之排序算法---简单选择排序_第1张图片

时间复杂度分析

简单选择排序最大的优点在于:减少了比较的次数
(1) 无论最好最差的情况,其比较次数都是一样多的:第i趟排序需要n-i次关键字的比较,此时需要比较
(n-1)+(n-2)+(n-3)+…+3+2+1 = n(n-1)/2;
(2)对于交换次数而言,当最好的时候,交换次数为0,最差的时候交换次数为n-1次
因此最终时间复杂度为:O(n2);
(3)尽管与冒泡排序同为O(n2),但简单选择排序的性能上还是要略优于冒泡排序。

你可能感兴趣的:(数据结构与算法)