选择排序

来源:互联网 发布:大话数据结构知乎 编辑:程序博客网 时间:2024/05/17 19:20

基本思想
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
- 选择排序的思想其实和冒泡排序有点类似,都是在一次排序后把最小的元素放到最前面,或者将最大值放在最后面。但是过程不同,冒泡排序是通过相邻的比较和交换。而选择排序是通过对整体的选择,每一趟从前往后查找出无序区最小值,将最小值交换至无序区最前面的位置。


具体的我们以一组无序数列{20,40,30,10,60,50}为例分解说明


代码实现
c版本

#include<stdio.h>int main(){    int i,n;    int a[100];    scanf("%d",&n);    for(i=1;i<=n;i++)        scanf("%d",&a[i]);    SelectionSort(a,n);    for(i=1;i<n;i++)        printf("%d ",a[i]);    printf("%d",a[n]);    return 0;}void SelectionSort(int k[],int n){    int i,j,flag;    int temp;    for(i=1;i<=n-1;i++)    {        flag=i;        for(j=i+1;j<=n;j++)            if(k[j]<k[flag])                flag=j;        if(flag!=i)        {            temp=k[flag];            k[flag]=k[i];            k[i]=temp;        }    }}

c++版本

#include<iostream>#include <algorithm>using namespace std;int main(){    void SelectionSort(int k[],int n);    int i,n;    int a[100];    cin>>n;    for(i=1;i<=n;i++)        cin>>a[i];    SelectionSort(a,n);    for(i=1;i<n;i++)        cout<<a[i]<<" ";    cout<<a[i]<<endl;    return 0;}void SelectionSort(int k[],int n){    int i,j,flag;    int temp;    for(i=1;i<=n-1;i++)    {        flag=i;        for(j=i+1;j<=n;j++)            if(k[j]<k[flag])                flag=j;        if(flag!=i)            swap(k[flag],k[i]);    }}
原创粉丝点击