桶排序(简化版)与冒泡排序

简介: 桶排序(简化版)与冒泡排序

1.桶排序(简化版)


所谓桶排序就是桶的序列是排好的,只需要把数字放在对应桶的序列就可以,记下这个桶里面数字出现过几次就可以。


我们来排个数吧!3 4 6 8 5 2 9 7 1


我们需要的桶数由最大数+1构成,所以占内存比较大,但时间复杂度小。用数组来储存,arr[10],数组的下标是从0开始的。先把桶都先初始化为0,表示没有一个数出现过.


先讲一下一维数组的初始化

这是一种初始化

int arr[10] = { 0 };

这样虽然初始化第一个元素,都是下面的各个元素都被默认为0

还可以这样初始化,下面的这种开始声明的并没有初始化,后续是进行的赋值

  int arr[10];
  int n = 0;
  for (n = 0; n < 10; n++)
  {
    arr[n] = 0;
  }

在平时的初始化中我喜欢第一种。

下面我们循环输入刚才的数 3 4 6 8 5 2 9 7 1

并且把数存到相应的桶中,并记录出现几次

  for (n = 0; n < 9; n++)
  {
    scanf("%d", &s);
    arr[s]++;
  }

接着我们把它输出就可以了(从小到大

  for (n = 0; n < 10; n++)
  {
    if (arr[n] != 0)
      printf("%d ", n);
  }

完整代码

#include <stdio.h>
#define MAX 10
int main()
{
  int arr[MAX]={0};
  int n = 0,s=0;
  for (n = 0; n < MAX-1; n++)
  {
    scanf("%d", &s);
    arr[s]++;
  }
  for (n = 0; n < MAX; n++)
  {
    if (arr[n] != 0)
      printf("%d ", n);
  }
  return 0;
}

2.冒泡排序(基本思路前一个数与第二个数进行比较)

冒泡”就像上面的图片一样,从下面上面,我们这里讲的冒泡排序 就和这个类似

还是这样一个无序的数列  3 4 6 8 5 2 9 7 1,我们想让它变成 1 2 3 4 5 6 7 8 9


假设有一个箭头J指向一个数


1)首先是J指向最下面的3, 它与J+1指向的数(也就是下一个数)进行比较,如果比它大,他俩就进行交换,否则不交换。然后J 往后走一步(j++),依此循环该步骤。直至到最后一个数的比较。这

次找到的是最大的数。

    for (j = 0; j < 9 - 1 - i; j++)
    {
      if (arr[j] > arr[j + 1])
      {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }

2)3 4 6 5 2 8 7 1 9 ,这是上一步排成的,可以观察到最后一个数已经排好了(可以理解为最大的气泡已经出水面了),下面的排序就是把已经排好的数字(每次排好的最后一个数)去掉,按照(1)进行排下列的数字.直至完成排序。


注意:


1.总排序此时为排序数字个数减1


2.每一次排序都减1

完整代码

int main()
{
  int arr[9] = { 3 ,4, 6, 8, 5, 2, 9 ,7, 1 };
  int i, j;
  for (i = 0; i < 9 - 1; i++)
  {
    for (j = 0; j < 9 - 1 - i; j++)
    {
      if (arr[j] > arr[j + 1])
      {
        int temp = arr[j];
        arr[j] = arr[j + 1];
        arr[j + 1] = temp;
      }
    }
  }
  return 0;
}

感兴趣的小伙伴可以对上面的冒泡排序的算法进行优化哦

相关文章
|
算法 搜索推荐 程序员
初阶算法(1):通过简单的排序算法来认识时间复杂度
初阶算法(1):通过简单的排序算法来认识时间复杂度
|
3月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
26 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
6月前
|
搜索推荐 Python
python实现冒泡排序、快速排序
python实现冒泡排序、快速排序
|
7月前
|
存储 算法 C语言
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
数据结构和算法——堆排序(选择排序、思路图解、代码、时间复杂度、堆排序及代码)
43 0
|
8月前
|
搜索推荐 算法 Python
不了解冒泡排序的原理?
不了解冒泡排序的原理?
66 5
|
8月前
|
人工智能 供应链 搜索推荐
①归并排序、快速排序 、堆排序、计数排序[算法、代码模板、面试题]
①归并排序、快速排序 、堆排序、计数排序[算法、代码模板、面试题]
105 0
|
存储 人工智能 搜索推荐
冒泡排序:了解原理与实现
冒泡排序:了解原理与实现
103 0
|
算法 搜索推荐
初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度
初阶算法(2):进行详细地介绍插入排序的细节和时间复杂度
|
搜索推荐
冒泡排序的原理
冒泡排序算法的原理如下: 1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3.针对所有的元素重复以上的步骤,除了最后一个。 4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比比较 白话就是:比如有6个数,你需要比较5趟,这个是固定死的
252 0
|
算法 搜索推荐
【排序算法】5行代码实现冒泡排序
【排序算法】5行代码实现冒泡排序