从小白开始自学数据结构——第十三天【简单选择排序】

本文介绍简单选择排序算法的实现原理及步骤,通过C语言代码示例详细解释如何进行排序,并指出该算法的时间复杂度为O(n^2),适用于数据结构初学者。

简单选择排序算法原理:每次从左至右扫描序列,记下最小值的位置。
设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。
//不稳定,时间复杂度O【n^2】
//时间复杂度略优于冒泡,但是不稳定。
//不是一个很好的排序算法。

/*****************************
        简单选择排序
*****************************/

# include <stdio.h>
# include <malloc.h>
# include <stdlib.h>
# include <algorithm>

struct Arr
{
    int * pBase;
    int length;;
};

void create_Arr(struct Arr *, int);
void sim_sort(struct Arr *);
void out_arr(struct Arr *);

int main(void)
{
    int val, num;
    struct Arr Arr;
    printf ("输入数组的个数");
    scanf("%d", &num);

    create_Arr(&Arr, num);
    for (int i = 0; i<num; i++)
    {
        printf ("第%d个数为\n", i+1);
        scanf("%d", &Arr.pBase[i]);
    }

    out_arr(&Arr);

    sim_sort(&Arr);
    out_arr(&Arr);
    printf("%d",Arr.length);

    return 0;
}

void create_Arr(struct Arr * p, int len)
{
    p->pBase = (int*)malloc(sizeof(int)*len);
    if (p->pBase == NULL)
    {
        printf("数组创建失败");
        exit(1);
    }
    p->length = len;
    return;
}

void sim_sort(struct Arr * p)
{
    int i, j, min, t;
    for (i = 0; i<p->length; i++)
    {
        min = i;
        for (j = i + 1; j < p->length; j++)//这里是j < p->length没有等于,垃圾教材瞎jb乱写,有了等于会丢掉最大值,我找这个错找了两个小时,还是很开心的
        {
            if ((p->pBase[min])>(p->pBase[j]))
                min = j;
        }
        if (i != min)
        {
            t = p->pBase[min];
            p->pBase[min]=p->pBase[i]  ;
            p->pBase[i] = t;
        }
    }
}

void out_arr(struct Arr * p)
{
    for (int i =0; i<p->length; i++)
        printf("%d ", p->pBase[i]);
        printf("\n");
    return;
}

数据结构若是入门,个人强烈不推荐大话数据结构,反正我强烈不推荐。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值