欢迎光临散文网 会员登陆 & 注册

排序算法总结

2023-02-17 09:10 作者:秋名山西  | 我要投稿

#include <stdio.h>


每一轮都会选出一个最大的数据放在队列后面,但是它不能保证之前的数据是有序的,所以下一次循环还是要从第一个元素开始进行比较,而且是相邻两个元素两两比较
void bubleSort(int *b, int c)
{
    int i=0,j=0,m=0;

    for(i=0;i<c;i++)
    {
        for(j=0;j<c-1;j++)
        {
            if(b[j]>b[j+1])
            {
                m=b[j];
                b[j]=b[j+1];
                b[j+1]=m;
            }
        }
    }
}
1、数据交换发生在m和i之间,不一定相邻
2、每一轮都会选出无序数据中最小的数据放在最前面开始形成有序队列,因此下一次选出的数据应当是次最小,所以应当在下一轮排序中将已经有序的元素排除在外
void selectSort(int *b, int c)
{
    int i=0,j=0,m=0,n=0;
    
    for(i=0;i<c;i++)
    {
        m=i;
        for(j=i+1;j<c&&(b[j]<b[m]);j++)
        {
            m=j;
        }
        n=b[i];
        b[i]=b[m];
        b[m]=n;
    }
}
选出第i个元素插入有序队列,而第i个元素之前的数据都是有序的,因此应当拿第i个元素与之前的数据挨个对比,符合条件的就两两交换数据
void insertSort(int *b,int c)
{
    int i=0,j=0,m=0;
    for(i=0;i<c;i++)
    {
        m=b[i];
        for(j=i;j>0&&(b[j-1]>m),j--)
        {
            b[j]=b[j-1];
        }
        b[j]=m;
    }
}

排序算法总结的评论 (共 条)

分享到微博请遵守国家法律