算法学习之旅,中级篇(1)-–选择排序

来源:互联网 发布:bi商业智能和数据平台 编辑:程序博客网 时间:2024/05/17 22:07

介绍
在要排序的一组数中,选出最小的,或者最大的一个数与第一个位置的数交换,然后在剩下的数当中再找最小,或者最大的与第二个位置的数交换。
以此类推。。。
直到第n-1个元素和第n个元素比较为止。
分析
第一躺:从n个数中找出最小的数与第一个数交换位置。
第二趟:从第二个数开始的n-1个数找到最小的数与第二个数交换位置。
以此类推。。。
第i躺:从第i个数开始到n-i+1个数中选出最小的数与第i个数交换位置。
直到整个序列有序排列。
代码

#include<iostream>#include<cstdio>using namespace std;void print(int a[],int n,int i){    cout<<"第"<<i+1<<"趟:";    for(int j=0;j<8;j++)        cout<<a[j]<<" ";    cout<<endl;    return;}int SelectMinKey(int a[],int n,int i){    int k=i;    for(int j=i+1;j<n;j++)    {        if(a[k]>a[j])            k=j;    }    return k;}void SelectSort(int a[],int n){    int key,temp;    for(int i=0;i<n;i++)    {        //选择最小的元素        key=SelectMinKey(a,n,i);        if(key!=i)        {            temp=a[i];            a[i]=a[key];            a[key]=temp;        }        print(a,n,i);    }    return;}int main(){    int a[8]={6,5,4,7,3,4,2,3};    cout<<"初始值: ";    for(int i=0;i<8;i++)        cout<<a[i]<<" ";    cout<<endl<<endl;    SelectSort(a,8);    print(a,8,8);    system("pause");    return 0;}

遇到的问题
选择排序是不稳定的排序方法。

原创粉丝点击