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

来源:互联网 发布:淘宝刷单注意事项 编辑:程序博客网 时间:2024/05/22 12:15

选择排序
12 13 15 23 20 31 19 26 24
1)算法
首先在未排序序列中找到最小元素,并于该序列的首元素做交换,再从剩余的未排序序列中继续寻找最小元素重复以上过程,直到未排序序列中仅剩一个元素为止。
2)评价
平均时间复杂度O(N^2),稳定,对数据的有序性不敏感。相对冒泡而言,因为交换的次数少,略优于冒泡。

实现要点:
1 由于不知道最小值,那么假设一个值是最小值,那么就假设数组的第一个下表的位置i是最小值min,也即min=i;
2 找到所有数中的最小值,重点是最小值的位置,无需关心值是什么
3 找到最小值之后交换最小值和首元素的位置即可
设计重点:
如果假设的最小值min的位置一直是i,那么位置无需交换,否则交换。

#include<iostream>#include<cstdlib>using namespace std;int getRandom(){    int num=rand()%100;     return num;}int* getArray(int *data,int size){    int num;    for(int i=0;i<size;++i){        num=getRandom();        data[i]=num;//      *(data+i)=i;    }    return data;}void Print(int *data,int size){    for(int i=0;i<size;++i){        cout<<data[i]<<' ';    }    cout<<endl;}void chioceSort(int *data,int size){        for(int i=0;i<size-1;++i){        int min=i;        for(int j=i+1;j<size;++j){            if(data[j]<data[min])                min=j;        }        if(min!=i){            int tmp=data[i];            data[i]=data[min];            data[min]=tmp;              }    }}int main(){    int *data;    int size;    cout<<"Pls input the size:";    cin>>size;    srand(time(0));    int* tmp=getArray(data,size);    chioceSort(tmp,size);    Print(tmp,size);    return 0;   }
1 0
原创粉丝点击