C++基础算法④——排序算法(插入、桶附完整代码)
创始人
2025-06-01 02:30:35

排序算法

1.插入排序

2.桶排序


1.插入排序

基本思想:将初始数据分为有序部分和无序部分;每一步将无序部分的第一个值插入到前面已经排好序的有序部分中,直到插完所有元素为止。
步骤如下

  1. 每次从无序部分中取出第一个值,然后,与有序部分中的值从后向前依次比较;
  2. 有序部分比较:当前大于后就交换值;
  3. 重复①②步骤;直到不再交换,就结束循环!
  4. 最后输出循环结果。

假如有[5,2,3,9,4,7] 6个元素值,有序部分为[2,3,5,9],无序部分为[4,7];接下来要把无序部分的“4”元素插入到有序部分,来展示一下插入排序的运行过程。

在这里插入图片描述

  1. 其中,浅绿色代表有序部分,黄色代表无序部分。
  2. 在无序部分中挑出要插入到有序部分中的元素。

在这里插入图片描述

  1. 将插入的元素与左边最近的有序部分的元素进行比较。由于4 < 9,所以9向后移,4向前移。
    •  在这里插入图片描述
  2.  继续与左边最近的有序部分的元素进行比较。由于4 < 5,所以5向后移,4继续向前移。
    1. 在这里插入图片描述
  3. 继续将4与3比较。由于4 > 3,所以不再向前比较,插入到当前位置。此时有序部分,由[2,3,5,9] 变成 [2,3,4,5,9]。
    1. 在这里插入图片描述
//3.插入排序 
#include
using namespace std;
int a[1000],n;
int main(){cin>>n;for(int i=0;i>a[i];}for(int i=1;i=0;j--){if(a[j+1]前数,那循环结束了。 break;} }}for(int i=0;i

  1. 稳定性:在使用插入排序时,元素从无序部分移动到有序部分时,必须是不相等(大于或小于)时才会移动,相等时不处理,所以直接插入排序是稳定的。

  2. 时间复杂度:选择排序的时间复杂度为O(n^{2})。

  3. 适用场景:待排序序列的元素个数不多(<=50),且元素基本有序。


2.桶排序

基本思想:将待排序的数值k,装入第k个桶,桶号就是待排序的数值,顺序输出各桶的值,得到有序的序列。

例如有 [5,4,9,4],把数值依次装入桶a; 那可以看出 a[4] = 2,a[5] = 1,a[9] = 1

那输出时候,按照顺序输出有桶号 4 4 5 9;
步骤:

  1. 先创建b桶数组并初始化值为0。
  2. 把k值装入第k个桶 b[k]++,对输入的同一个桶号,就累加。
  3. k是输入的桶号,也可以用a[i]表示,b[a[i]]++ 。
  4. 当有桶号数量 b[i]!=0 ,代表第i个桶是有值的,就输出桶号;
  5. 输出后就少了一个值要减掉,即 b[i]--。

编程对1万以内的数进行排序:

#include
using namespace std;
int a[100000],b[100000],n;
int main(){cin>>n; for(int i=1; i<=n; i++){cin >> a[i]; //输入桶号b[a[i]]++; // 统计桶号数量1 }for(int i=1; i<=10000; i++){while(b[i]!=0){ //当有桶号 cout<

  1. 时间复杂度:选择排序的时间复杂度为O(n)。
  2. 适用场景:桶排序适用于数据量一般的排序场景。

相关内容

热门资讯

cad打印线条粗细设置 cad... 004-线型(下)打印样式设置和线型文件使用一、线宽设置方法制图规范里边的线宽要求,我们已经定义好,...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
阿西吧是什么意思 阿西吧相当于... 即使你没有受到过任何外语培训,你也懂四国语言。汉语:你好英语:Shit韩语:阿西吧(아,씨발! )日...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...