选择排序

来源:互联网 发布:成都大数据协会 编辑:程序博客网 时间:2024/06/05 03:50

基本概念:

     每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

基本思想:

    每轮找一个最大(小)值。    在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换......第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。

复杂度分析:

    空间效率:仅用了一个辅助交换单元。O(n)    选择排序最好(正序无交换)为O(0) 。    选择排序的最坏(倒序)为O(n2)。    选择排序的平均(乱序)为O(n2)。    选择排序是不稳定的。
#include<bits/stdc++.h>using namespace std;void f(int a[],int n){    int i,j,temp;    for(i=1; i<n; i++) //从第一个位置开始    {        temp=i;        for(j=i+1; j<=n; j++)        {            if(a[j]<a[temp]) temp=j; // 查找最小数的位置        }        if(temp!=i)  //  如果a[i]不是最小数            swap(a[i],a[temp]);    }}int main(){    int n,i,a[100010];    scanf("%d",&n);    for(i=1; i<=n; i++) scanf("%d",&a[i]);    f(a,n);    for(i=1; i<=n; i++) printf("%d ",a[i]);    return 0;}
原创粉丝点击