首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++|计数排序

说明 排序的定义 对一序列对象根据某个关键字进行排序。...术语说明 稳定 :如果a原本在b前面,而a=b,排序之后a仍然在b的前面; 不稳定 :如果a原本在b的前面,而a=b,排序之后a可能会出现在b的后面; 内排序 :所有排序操作都在内存中完成; 外排序 :...由于数据太大,因此把数据放在磁盘中,而排序通过磁盘和内存的数据传输才能进行; 时间复杂度 :一个算法执行所耗费的时间。...计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。 计数排序是一种稳定的排序算法。...计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。它只能对整数进行排序

45020
您找到你想要的搜索结果了吗?
是的
没有找到

C++ 插入排序,冒泡排序和选择排序

大学的时候学过C,现在已经忘得七七八八了,现在想再学一下C/C++。 刚试着重写/温习了3个最简单的排序算法。 插入排序:依次将右边未排序的元素插入到左边已排序序列的合适位置。...float* sort_insertion(float a[], int len_a) { /*插入排序 类似我们排序扑克牌*/ for(int i=1; i < len_a; i++)...;//大的往后退一位 a[j+1] = to_insert;//a[j] > to_insert 不成立时 j+1的值即是待插入的位置 } return a; } 冒泡排序和选择排序大学都学过...冒泡排序: 时间复杂度:O(n^2) float* sort_bubble(float a[], int len_a) { /*冒泡排序 依次比较相邻的两个元素,如果顺序错误就将它们的位置交换...: 时间复杂度:O(n^2) float* sort_selection(float a[], int len_a) { /*选择排序 依次将左边未排序序列中的最大元素,存放到右边已排序序列的左端

1.2K20

C++ 经典排序算法

1.1.概述 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。...快速排序的平均时间复杂度为o(n*logn),至于为什么是o(n*logn)。且常数因子很小,所以就平均时间而言,快速排序是很好的内部排序方法。在待排序序列有序或逆序时不宜选用快速排序。...早了解和熟悉了排序过程后,我们发现,直接插入排序是一种稳定的原地排序算法。...4.折半插入排序 4.1.概述 折半插入排序是对直接插入排序的简单改进,对于直接插入排序而言,当第i-1趟需要将第i个元素插入前面的0~i-1个元素序列中时,总是需要从i-1个元素开始,逐个比较每个元素...所以在记录数较小、待排序序列基本有序情况下直接插入排序优于折半插入排序。此外,折半插入排序是不稳定的原地排序,实现起来也较复杂。 看了这么多比较经典的排序算法,有没有觉得算法真的是一个神奇的“道具”。

94820

C++ sort()排序详解

sort()  在刷题的时候我们经常会碰到排序的问题,如果我们不使用一些排序的方法那我们只能手撕排序,这样就会浪费一些时间。...而且我们还需要根据需要去选择相关的排序方法:冒泡排序、快速排序、插入排序、希尔排序、归并排序、选择排序、堆排序、基数排序、桶排序。...其实STL中的sort()并非只是普通的快速排序,除了对普通的快速排序进行优化,它还结合了插入排序和堆排序。根据不同的数量级别以及不同情况,能自动选用合适的排序方法。...sort()的使用方法 头文件  在C++中使用sort()函数需要使用#include头文件。...algorithm意为”算法”,是C++的标准模版库(STL)中最重要的头文件之一,提供了大量基于迭代器的非成员模版函数。

1.2K30

C++实现冒泡排序

冒泡排序介绍冒泡排序是一种简单的排序算法,原理如下:从待排序的数组的第一个元素开始,依次比较相邻的两个元素。如果前面的元素大于后面的元素,则交换这两个元素的位置,使较大的元素向后移动。...对除了已排序的最后一个元素外的剩余元素,重复以上步骤,直到整个数组排序完成。通过不断地比较和交换相邻元素,较大的元素会逐渐“冒泡”到数组的末尾,因此称为冒泡排序。...冒泡排序的空间复杂度为O(1),即不需要额外的空间来存储数据。在每一轮比较和交换操作中,只需要使用常数级别的额外空间来存储临时变量。因此,冒泡排序是一种原地排序算法,不会占用额外的内存空间。...经过n-1轮的循环之后,整个数组就被排序完成了。...C++具体实现#include using namespace std;void bubbleSort(int arr[], int n){ int i, j; for

15721

排序算法笔记(C++版)

:1 3 5 7 9 2 4 6 8 0 此次排序耗时: 2us 执行了19次swap交换 排序结果为:0 1 2 3 4 5 6 7 8 9 待排序数据为:0 1 2 3 4 9 8 7 6...5 此次排序耗时: 1.1us 执行了10次swap交换 排序结果为:0 1 2 3 4 5 6 7 8 9 请按任意键继续. . . 2.选择排序 时间复杂度:O(n^2^)[最好],O(n^...:1 3 5 7 9 2 4 6 8 0 此次排序耗时: 1.1us 执行了9次swap交换 排序结果为:0 1 2 3 4 5 6 7 8 9 待排序数据为:0 1 2 3 4 9 8 7...:1 3 5 7 9 2 4 6 8 0 此次排序耗时: 0.3us 排序结果为:0 1 2 3 4 5 6 7 8 9 待排序数据为:0 1 2 3 4 9 8 7 6 5 此次排序耗时:...quicksort(x, mi + 1, hi);//对后缀递归排序 } 运行结果: 待排序数据为:1 3 5 7 9 2 4 6 8 0 此次排序耗时: 5.1us 排序结果为:0 1

32830

C++ sort排序函数用法

最近在刷ACM经常用到排序,以前老是写冒泡,可把冒泡带到OJ里后发现经常超时,所以本想用快排,可是很多学长推荐用sort函数,因为自己写的快排写不好真的没有sort快,所以毅然决然选择sort函数...用法 1、sort函数可以三个参数也可以两个参数,必须的头文件#include 和using namespace std; 2、它使用的排序方法是类似于快排的方法,时间复杂度为...n*log2(n) 3、Sort函数有三个参数:(第三个参数可不写) (1)第一个是要排序的数组的起始地址。...(2)第二个是结束的地址(最后一位要排序的地址) (3)第三个参数是排序的方法,可以是从大到小也可是从小到大,还可以不写第三个参数,此时默认的排序方法是从小到大排序。...(两个参数的sort默认升序排序) ---- 三个参数 // sort algorithm example #include // std::cout #include

42010

链表排序总结(全)(C++

文章目录 链表排序与数组排序的区别 借助外部空间 冒泡排序 插入排序 归并排序 快速排序 链表排序与数组排序的区别 数组的排序几乎所有人都很熟悉了,常用的算法插入、冒泡、归并以及快排等都会或多或少依赖于数组可以在...链表排序一般指单链表排序,链表是不支持随机访问的,需要访问后面的节点只能从表头顺序遍历,所以链表的排序是一个相对比较复杂的问题。 那么怎样进行链表排序呢?...但事实上链表排序完全没必要使用冒泡,因为对于链表来说,插入排序比冒泡排序更容易理解也更简单,具体可以看下一部分插入排序的讲解。这儿就不贴冒泡的代码了(其实是因为没写(⊙﹏⊙))。...插入排序 数组的插入排序,简单来说就是每次在未排序区间取元素,然后将该元素插入到已排序空间的合适位置,直到未排序空间为空。 链表的插入排序处理逻辑与数组的是一致的。...对链表进行插入排序 – 力扣(LeetCode) LeetCode第 147 题:对链表进行插入排序(C++) 贴一个代码: class Solution { public: ListNode

62910
领券