算法基础入门 - 1.排序

算法基础入门

第一章:排序

1.1 桶排序

该算法好比桶,假设有11个桶,编号从0-11。每出现一个数,就往对应编号的桶中放入旗子,只需要数桶中旗子的个数即可。比如2号桶有1个旗子,表示2出现了一次,3号桶有0个旗子,表示3出现了零次,5号桶有2个旗子,表示5出现了两次。

a[0]为0, 表示‘0’没有出现过,不打印
a[1]为0, 表示‘0’没有出现过,不打印
a[2]为1, 表示‘2’出现过1次, 打印2
a[3]为0, 表示‘0’没有出现过,不打印
a[4]为0, 表示‘0’没有出现过,不打印
a[5]为1, 表示‘5’出现过1次, 打印1次
a[6]为2, 表示‘6’出现过2次, 打印2次
a[7]为1, 表示‘0’没有出现过,不打印
a[8]为0, 表示‘0’没有出现过,不打印
a[9]为0, 表示‘0’没有出现过,不打印
a[10]为0,表示‘0’没有出现过,不打印

请添加图片描述

#include <stdio.h>

int main()
{
   
    int book[101],i,j,input,num;
    for(i = 0; i < 101; i++)
    {
   
        book[i] = 0;
    }
    scanf("%d", &num);                    //表示要输入数字的个数 
    for(i = 1; i <= num; i++)           //输入n个数,进行桶排序 
    {
   
        scanf("%d", &input);            //读取数字 
        book[input]++;                    //进行计数 
    }
    for(i=100; i >= 0; i--)             //依次进行判断 
    {
   
        for(j = 1; j <= book[i]; j++)   //打印数字,打印的次数为数字出现的次数 
        {
   
            printf("%d ", i);
        }
    }
    printf("\n");                         //输出完后进行换行 
    return 0;
}
1.2 冒泡排序

基本思想:每次比较两个相邻的元素,若它们的顺序错误就将它们交换过来。
原理:每一趟只能确定将一个数归位
例: 10 6 4 7 2 5 将这6个数进行从大到小的排序。
第一趟:
首先比较第一位与第二位的大小,也就是10与6的比较,10比6大,所以无需交换两个数的位置。
继续比较第一位与第三位的大小,也就是10与4的比较,10比4大,所以无需交换两个数的位置。
继续比较第一位与第四位的大小,也就是10与7的比较,10比7大,所以无需交换两个数的位置。
继续比较第一位与第五位的大小,也就是10与2的比较,10比2大,所以无需交换两个数的位置。
继续比较第一位与第六位的大小,也就是10与5的比较,10比5大,所以无需交换两个数的位置。
第二趟:
首先比较第二位与第三位的大小,也就是6与4的比较,6比4大,所以无需交换两个数的位置。
继续比较第二位与第四位的大小,也就是6与7的比较,6比7小,所以需交换两个数的位置。此时 10 7 4 6 2 5。
继续比较第二位与第五位的大小,也就是7与2的比较,7比2大,所以无需交换两个数的位置。
继续比较第二位与第六位的大小,也就是7与5的比较,7比5大,所以无需交换两个数的位置。
第三趟:
首先比较第三位与第四位的大小,也就是4与6的比较,4比6,所以需交换两个数的位置。此时 10 7 6 4 2 5。
继续比较第三位与第五位的大小,也就是6与2的比较,6比2大,所以无需交换两个数的位置。
继续比较第三位与第六位的大小,也就是6与5的比较,6比5大,所以无需交换两个数的位置。
第四趟:
继续比较第四位与第五位的大小,也就是4与2的比较,4比2大,所以无需交换两个数的位置。
继续比较第四位与第六位的大小,也就是4与5的比较,4比5小,所以需交换两个数的位置。此时 10 7 6 5 2 4。
第五趟:
比较第五位与第六位的大小,也就是2与4的比较,2比4小,所以需交换两个数的位置。此时 10 7 6 5 2 2。
总结:若有n个数进行排序,只需将n-1个数归位,也就是n-1趟,每一趟都需从第一位开始进行相邻两个数的比较,比较完后向后挪一位继续比较下两个数,已经归位的数无需再进行比较。
时间复杂度O(N^2)

#include <stdio.h>

struct Student                               //创建结构体,存放学生的姓名和成绩 
{
   
    char name[20];
    int score;
};

int main()
{
   
    struct Student s1[100],temp
  • 95
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
算法图解-python.pdf》是一本介绍算法和使用Python语言实现算法的书籍。该书的目的是帮助读者了解算法的基本概念和原理,并通过Python编程实践来加深理解。 这本书以图解的方式呈现算法的思想和应用,使复杂的算法问题变得直观易懂。读者可以通过阅读该书,学习到各种常见的算法设计和解决思路,如排序算法、搜索算法、图算法等。同时,该书也会介绍一些高级算法,如动态规划、贪婪算法等,以及如何通过Python语言实现这些算法。 《算法图解-python.pdf》的内容结构清晰,通俗易懂。每个算法都有详细的解释和示例代码,读者可以通过实际编程来加深对算法的理解。此外,书中还包含了一些挑战性的练习题,供读者进一步巩固所学的知识。 通过阅读《算法图解-python.pdf》,读者不仅可以学习到算法的基本知识,还可以了解到如何运用Python语言实现这些算法。这对于刚开始学习算法和Python编程的读者来说是非常有帮助的。无论是计算机科学专业的学生,还是对算法感兴趣的爱好者,都可以从这本书中受益匪浅。 总之,《算法图解-python.pdf》是一本很好的算法入门书籍,以图解和Python编程为特色,适合各类读者学习和参考。通过阅读和实践,读者可以提高算法设计和编程实现的能力,为解决实际问题提供有效的思路和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值