网络

教育改变生活

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1295|回复: 0
打印 上一主题 下一主题

【数据结构】直接选择排序算法

[复制链接]

686

主题

693

帖子

3101

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3101
跳转到指定楼层
楼主
发表于 2021-1-21 11:28:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
直接选择排序的效率与初始状态无关,即无最好最坏的情况.时间复杂度为O(n*n),不是稳定的排序算法
#include<stdio.h>
struct node
{
    int key;
};
typedef struct node DataType;      //DataType是struct node的别名
int Sel_sort(DataType Ar[],int n);      //声明直接选择排序算法
int main(void)
{
    int n,i;
    DataType array[20];
    printf("Input the length of the array <<20>:");
    scanf("%d",&n);
    for(i=0; i<n; i++)                 //输入数组
    {
        printf("Input %d datas:",i+1);
        scanf("%d",&array[i]);
    }
    printf("\n The array are:");
    for(i=0; i<n; i++)
    {
        printf("%4d",array[i]);              //输入的数组显示
    }
    Sel_sort(array,n);          //调用排序算法
    printf("\n The array after Sel_sort are:");
    for(i=0; i<n; i++)             //输出排序后的算法结果
    {
        printf("%4d",array[i]);
    }
    return(0);
}
int Sel_sort(DataType Ar[],int n)          //直接选择排序算法
{
    DataType temp;
    int i,small,j;
    for(i=0; i<=n-1; i++)             //i控制n-1趟扫描
    {
        small=i;                        //用变量small记住当前最小排序码的位置
        for(j=i+1; j<n; j++)            //j控制这趟扫描的比较范围
            if(Ar[j].key<Ar[small].key)      //如果发现更小者,随时修改small的值
                small=j;
        if(small!=i)                               //small与比较范围首元素下标不同,则交换
        {
            temp=Ar[i];                 //交换是利用临时变量temp进行的
            Ar[i]=Ar[small];
            Ar[small]=temp;
        }
    }
}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

WEB前端

QQ|手机版|小黑屋|金桨网|助学堂  咨询请联系站长。

GMT+8, 2024-12-22 20:29 , Processed in 0.032775 second(s), 21 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表