C语言中数组常用的排序算法

这篇具有很好参考价值的文章主要介绍了C语言中数组常用的排序算法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一.C语言中数组的一些算法

1.1冒泡排序

1.2选择排序

1.3插入排序

1.4快速排序


一.C语言中数组的一些算法

把数据按照从小到大或从大到小 的顺序进行排列

有很多算法:冒泡排序、选择排序、插入排序、快速排序、计数排序、堆排序 .......

常用的有四种:

1.1冒泡排序

主要思想:

总共需要比较n-1轮

每一轮依次比较当前元素和后面的元素,如果当前元素比后面元素大,则交换他们的位置

一轮下来,最大的元素放在了数组最后面c语言数组排序,排序算法,算法,数据结构,c语言

int a[10] = {50,23,80,18,100,5,10,58,30,2};

第一轮:

23,50,18,80,5,10,58,30,2,100

第二轮:

23,18,50,5,10,58,30,2,80,100

......

for(i=0;i<10-1;i++)//比较10-1轮

{

for(j=0;j<10-1-i;j++)

{

if(a[j] > a[j+1])

{

//交换

temp = a[j];

a[j] = a[j+1];

a[j+1] = temp;

}

}

}

1.2选择排序

总共需要比较n-1轮

每一轮比较最多只交换一次数据(把最大数字放在最后面位置或把最小的数字放在最前面位置)

 c语言数组排序,排序算法,算法,数据结构,c语言

 

#include<stdio.h>

int main()

{

    int a[10] = {50,23,80,18,100,5,10,58,30,2};

    

    int i,j;

    int temp;

   

    for(i=0;i<10-1;i++)//进行n-1轮比较

    {

        int max = a[0];//假设最大的数字是a[0]

        int index = 0;//用来保存最大值的下标

        for(j=0;j<10-i;j++)//每一轮比较把最大的数字放在最后面

        {

            if(a[j] > max)

            {

                max = a[j];

                index = j;

            }

        }

        

        //至此我们已经最大值为 max, 他的下标为index ,交换 a[index] 所在元素和 a[9-i]

        if(index != 9-i)

        {

            temp = a[index];

            a[index] = a[9-i];

            a[9-i] = temp;

        }

    }

    for(i=0;i<10;i++)

    {

        printf("%d ",a[i]);

    }

    printf("\n");

    return 0;

 }

类似的,把最小的放后面:

#include<stdio.h>

int main()

{

    int a[10] = {50,23,80,18,100,5,10,58,30,2};

    

    int i,j;

    int temp;

   

    for(i=0;i<10-1;i++)

    {

        //每一轮比较把最小的数字放在最前面

        int min = a[9];

        int index = 9;

        for(j=0+i;j<10;j++)

        {

            if(a[j]<min)

            {

                min = a[j];

                index = j;

            }

        }

        

        //至此我们已知最小值为 min ,他的下标为index ,交换 a[index] 所在元素和 a[i]

        if(index != i)

        {

            temp = a[index];

            a[index] = a[i];

            a[i] = temp;

        }

    }

    

    for(i=0;i<10;i++)

    {

        printf("%d ",a[i]);

    }

    printf("\n");

    return 0;

}

1.3插入排序

算法思想:直接插入排序是无序序列插入到有序序列中,通常假定a[0]为已经排好序的子序列,然后将剩下无序序列一个一个插入到有序的子序列中。适用于基本有序和数据量不大的情况。

c语言数组排序,排序算法,算法,数据结构,c语言

 

#include<stdio.h>

#include<math.h>



int main()

{

    int a[10] = {999,10,15,18,5,30,80,26,345,-10};

    

    int i,j;

    for(i=1;i<10;i++)//总共需要插入9轮

    {

        //把 a[i] 插入到前面的有序集合中,使之仍然有序

        int data = a[i];

        for(j=i-1;j>=0;j--)

        {

            if(a[j]>data)

            {

                a[j+1] = a[j];

            }

            else

            {

                a[j+1] = data;

                break;

            }

        }

        

        if(j==-1)

        {

            a[0] = data;

        }

    }

        

    

    for(i=0;i<10;i++)

    {

        printf("%d ",a[i]);

    }

    printf("\n");

    

}

1.4快速排序

1先从数组中选取一个数作为基准点,可随机选择;

2 将数组中大于该基准点的放在该基准点右边,小于该基准点的放在该基准点左边;

3 对左右两个数组进行快速排序。

代码示例:

#include <stdio.h>

//快速排序 有左右两边 因此我需要传进来左右的下标

void FastSort(int a[],int left,int right)

{

    //当左边比右边不得小 我们就没有必要排序了

    if(left >= right)

        return;

    int l = left;

    int r = right;

    //设置基准点 我这里设置的是第一个

    int temp = a[left];

    //将我们的数组进行一次快排

    //将temp的左边变得都比temp小,右边都比temp大

    while(l < r)

    {

        //由于你的基准点是在左边第一个  因此首先就要从右边找到左边

        //将右边小于基准点的元素弄到左边去

        for(;r > l;r--)

        {

            if(temp > a[r])

            {

                //将这个小一点的数弄到左边去

                a[l] = a[r];

                break;

            }

        }

        

        //然后从左边找到右边去 找到比基准点大的 放在右边去

        for(;r > l;l++)

        {

            if(temp < a[l])

            {

                //将大的数弄到右边去

                a[r] = a[l];

                break;

            }

        }        

    }

    a[l] = temp;//恢复基准点

    

    //以相同的规则将左边的排序

    FastSort(a,left,l - 1);

    

    //以相同的规则将右边排序

    FastSort(a,r + 1,right);

    

    

}





//打印数组

void PrintArr(int arr[],int n)

{

    for(int i = 0;i < n;i++)

        printf("%d ",arr[i]);

    printf("\n");

    

}



int main()

{

    int a[] = {12378,34,412,453,34,25,4,432,5,43};

    

    FastSort(a,0,sizeof(a) / sizeof(a[0]) - 1);

    

    

    PrintArr(a,sizeof(a) / sizeof(a[0]));

    

    

    return 0;

}

 文章来源地址https://www.toymoban.com/news/detail-718444.html

到了这里,关于C语言中数组常用的排序算法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据结构与算法——排序(C语言实现)

    ✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅✅ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿🌿 🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟🌟 🌟🌟 追风赶月莫停留 🌟🌟 🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀 🌟🌟 平芜尽处是春山

    2024年04月09日
    浏览(59)
  • 内部排序算法比较-数据结构C语言课设

    名称: 内部排序算法比较 内容: 在教科书中,各种内部排序算法的时间复杂的分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各种算法的比较次数和移动次数,以取得直观感受。 任务: (1)对以下7中常会用的内部排序算法进行比较

    2024年02月12日
    浏览(55)
  • 头歌(C语言)-数据结构与算法-数组(共7关)

    任务描述 本关任务:将十个数进行从大到小的顺序进行排列。 相关知识(略) 编程要求 根据提示,在右侧编辑器 Begin-End 处补充代码。 输入 输入十个整数。 输出 以从大到小的顺序输出这个十个数。 测试说明 样例输入: 1 2 3 4 5 6 7 8 9 10 样例输出: 10 9 8 7 6 5 4 3 2 1 代码:

    2024年02月11日
    浏览(42)
  • 数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)五

    数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵的角度讨论二维数组的存储,同时讲解广义表的存储结构以及有关其广度和

    2024年01月23日
    浏览(50)
  • 数据结构与算法教程,数据结构C语言版教程!(第五部分、数组和广义表详解)三

    数组和广义表,都用于存储逻辑关系为“一对一”的数据。 数组存储结构,99% 的编程语言都包含的存储结构,用于存储不可再分的单一数据;而广义表不同,它还可以存储子广义表。 本章重点从矩阵的角度讨论二维数组的存储,同时讲解广义表的存储结构以及有关其广度和

    2024年01月21日
    浏览(48)
  • 第11章:C语言数据结构与算法初阶之排序

    排序是一种非常重要的算法。 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,

    2024年02月12日
    浏览(47)
  • 数据结构(C语言实现)——常见排序算法的基本思想及实现(快速排序的三种方法和优化及非递归实现快速排序)

    生活中几乎处处都会用到排序,比如:网购时的店铺顺序,学生成绩的排名等,今天我们就来学习数据结构中常见的几种排序算法。 排序 :所谓排序,就是使一串记录,按照其中的某个或某些的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列

    2023年04月24日
    浏览(66)
  • C语言数据结构+KMP算法next数组优化计算方法+优化后子串匹配代码实现

    通过我之前那篇KMP算法的讲解,我们可以快速手算KMP算法的next数组,但是之前计算的next数组在一些情况下会有缺陷,比如模式串’aaaab’和主串’aaabaaaab’进行匹配 令模式串指针为j 当第一个元素不匹配时,下一次匹配还是要从模式串的第一个元素与主串匹配,其实我们可以直接写

    2024年02月06日
    浏览(54)
  • C语言中数组常用的排序算法

    目录 一.C语言中数组的一些算法 1.1冒泡排序 1.2选择排序 1.3插入排序 1.4快速排序 把数据按照从小到大或从大到小 的顺序进行排列 有很多算法:冒泡排序、选择排序、插入排序、快速排序、计数排序、堆排序 ....... 常用的有四种: 1.1冒泡排序 主要思想: 总共需要比较n-1轮

    2024年02月08日
    浏览(47)
  • 数据结构——利用堆进行对数组的排序

    今天文章的内容是关于我们如何利用堆的特性对我们的数组进行排序,还有就是我们的TopK的问题,这次我们放在的是文件种,我们放入一亿个数字,然后我们取出一亿个数字中最大的十个数,利用上章堆的问题进行解决。 首先就是我们如果对一个数组要进行排序,这个数组

    2024年02月05日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包