啊哈!算法 学习1 排序 - 简单的桶排序

//排序10个0-100之间数字

        //定义int数组
        //这里生成包含101个个数数组是以为要对应输入的值 到对应到数组的index  譬如输入10 对应a[10]
        int a[101];
        //数组赋值 生成
        for (int i = 0; i < 101; i++)
        {
            a[i] = 0;
        }

        //声明变量
        int x;
        //循环输入10个数字
        for (int i = 0; i < 10; i++)
        {
            //读取输入值
            scanf("%d",&x);
            //输入值对应在数组里面位置的值+1
            if (x>100)
            {
                NSLog(@"请输入0-100之间的数字");
                i--;
            }else
            {
                //输入那个数字在数组中对应index的值+1 可以输入多个相同的数字
                //初始化是a[]中所有值为0
                a[x]++;
                NSLog(@"输入的第%d数字为:%d,还需要输入%d个数字",i+1,x,9-i);
            }

        }
        NSLog(@"数组从小到大排列为:");
        //循环读取数组里面的数字
        for (int i = 0; i<101; i++)
        {
            //如果数组对应位置的值大于1 则输入值为当前数组的index
            //for是为了判断当前数组index输入了几次
            for (int j = 1; j <= a[i]; j++) {
                NSLog(@"%d",i);
            }

        }

         NSLog(@"数组从大到小排列为:");

        for (int i = 100; i>=0; i--)
        {
            for (int j = 1; j <= a[i]; j++) {
                NSLog(@"%d",i);
            }

        }

demo

时间: 2024-11-02 14:41:18

啊哈!算法 学习1 排序 - 简单的桶排序的相关文章

三种线性排序算法(计数、基数、桶排序)的简单实现

一.计数排序 计数排序假设n个输入元素中的每一个都是介于0到k之间的整数.此处k为某个整数(输入数据在一个小范围内). 基本思想: 计数排序的基本思想是对每一个输入元素x,确定出小于x的元素的个数.然后再将x直接放置在它在最终输出数组中的位置上. 如下图所示: 由于数组中可能有相等的数,在处理时需要注意. 时间复杂度和空间复杂度分析 算法总时间Θ(k + n).当k=O(n)时,计数排序的运行时间是Θ(n). 空间复杂度是O(n+k).需要两个辅助数组:存放排序结果的数组B[n],存放临时结果的

数据结构和算法学习六,之非递归排序

http://blog.csdn.net/feixiaoxing/article/details/6844826 在上面一篇博客当中,我们发现普通查找和排序查找的性能差别很大.作为一个100万的数据,如果使用普通的查找方法,那么每一个数据查找平均下来就要几十万次,那么二分法的查找呢,20多次就可以搞定.这中间的差别是非常明显的.既然排序有这么好的效果,那么这篇博客中,我们就对排序算做一个总结. 按照我个人的理解,排序可以分为两种:一种是非递归排序,它主要按照非递归的方法对数据进行排序,也就是说主

算法学习(二):O(n^2)排序算法

总结一下学习的复杂度为O(n^2)的三种排序算法:选择排序,插入排序,希尔排序. (1)选择排序:从第一个位置开始每次查找剩下的位置中最小的数值放入当前位置: (2)插入排序:从第二个位置开始,每次都将当前位置的数值插入前面合适的位置,对于几乎有序的数列来说,插入排序能带来更高的效率: (3)希尔排序:变步长区间的插入排序,指定一个步长衰减率,每一轮插入排序都将间隔指定步长的数值排序完成,当步长衰减为1时,就成了标准的插入排序. 代码实现: (1)选择排序 var selectSort = fu

【C#】1.算法温故而知新 - 简单的桶排序

缺点: 1.不适用于小数 2.当数值过多,太浪费空间,比如数值范围为0~99999,那需申请100000个变量,也就是要写成a[1000000]. 代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { public class Program { public static void Main(strin

简单的桶排序

#include<stdio.h>int main(){ int i,j,n,t; int tong[11]; printf(" 请输入数字个数 :"); scanf("%d",&n); for(i=1;i<=n;i++) { tong[i]=0; } for(i=1;i<=n;i++) { scanf("%d",&t); tong[t]++; } for(i=1;i<=n;i++) { printf

复习数据结构:排序算法(七)——桶排序

桶排序是一种稳定的排序方法,也是一种外排序. 桶排序的时间复杂度:最坏情况运行时间:当分布不均匀时,全部元素都分到一个桶中,则O(n^2),当然[算法导论8.4-2]也可以将插入排序换成堆排序.快速排序等,这样最坏情况就是O(nlgn).最好情况运行时间:O(n). 也就说,前面介绍的排序算法要么是O(n^2),要么是O(nlogn),只有桶排序是可能实现O(n)排序的,但是对数据是有要求的. 基本思想:是将阵列分到有限数量的桶子里.每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续

排序算法之——桶排序

这是本人的第一篇随笔,为的是分享学习经验,和大家讨论一些算法,以便取得些许进步,也是对学习的总结. 话不多说,下面我会用图文的方式向各位介绍桶排序. 1.主要思想: 桶排序的大体思路就是先将数组分到有限个桶中,再对每个桶中的数据进行排序,可以说是鸽巢排序的一种归纳结果(对每个桶中数据的排序可以是桶排序的递归,或其他算法,在桶中数据较少的时候用插入排序最为理想). 2.算法效率: 对N个数据进行桶排序的时间复杂度分为两部分: 1.对每一个数据进行映射函数的计算(映射函数确定了数据将被分到哪个桶),

排序算法下——桶排序、计数排序和基数排序

桶排序.计数排序和基数排序这三种算法的时间复杂度都为 $O(n)$,因此,它们也被叫作线性排序(Linear Sort).之所以能做到线性,是因为这三个算法是非基于比较的排序算法,都不涉及元素之间的比较操作. 1. 桶排序(Bucket Sort)? 1.1. 桶排序原理 桶排序,顾名思义,要用到"桶".核心思想是将要排序的数据分到几个有序的桶里,每个桶的数据再单独进行排序.桶内排完序后,再把每个桶里的数据按照顺序依次取出,组成的序列就是有序的了. 1.2. 桶排序的时间复杂度分析 如

8-4.桶排序算法详解

1. 桶排序介绍 桶排序(Bucket sort)是一种基于计数的排序算法,工作的原理是将数据分到有限数量的桶子里,然后每个桶再分别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序).当要被排序的数据内的数值是均匀分配的时候,桶排序时间复杂度为Θ(n).桶排序不同于快速排序,并不是比较排序,不受到时间复杂度 O(nlogn) 下限的影响. 桶排序按下面4步进行: 1. 设置固定数量的空桶. 2. 把数据放到对应的桶中. 3. 对每个不为空的桶中数据进行排序. 4. 拼接从不为空