十大排序是啥?
在人们的刻板印象中,排序是个傻子都会的事……
But注意,如果我让你说出排序过程并写在纸上呢?层次瞬间就不一样了,那如果我在为难你一下,你把排序过程写出代码并且适用所有数呢?这,就是我们的最终任务
商品排序
Description
某商场的仓库中有 n 件商品,每件商品的价格在 0~1000 之间(价格为 0 的商品为赠品)。现在商场经理要求将这 n 件商品按价格由低到高排序。请编程输出 n 件商品排序后的情况。
Input
第一行一个正整数 n,表示有 n 件商品,1≤n≤100000。
接下来的 n 行,每行一个整数,表示第 i 件商品的价格。
Output
n 行,每行输出一个整数。
Sample Input 1
5 1 8 1 2 2
Sample Output 1
1 1 2 2 8
我们要做这个题就要有一个一定的思路,而这个思路是什么,题目告诉了你答案
冒泡排序(Bubble Sort)
啥是冒泡排序,用教科书的语言来说冒泡排序(Bubble Sort)就是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
说实话,我看不懂,但我大受震撼,那么我们就来慢慢分析这句话
第一句(最重要)
——它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
它重复地走访过要排序的数列,注意里面的一个敏感词汇"重复"说明循环在里面不可缺少,且非常重要。"走访"翻译一下就是要遍历数组,还是循环,而重复的遍历,就是循环嵌套。
一次比较两个元素,其中比较要用的首先肯定是比较运算符,那如何判定,就一定是如果……那么……,也就是if语句
如果他们的顺序错误就把他们交换过来,而这句主要说的还是if语句
我们把它连起来,就是首先运用循环嵌套多次遍历整个数组,从第一个数开始,一次向后一个数比较,如果大于后数,那么与后一个交换在与下一个数比,如果不是就以后数再去与下一个数比,在第一轮从前向后的比较结束后,再通过外循环在从头开始,直至数组从小到大依次排好
第二句
——走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
本句主要说的是排序的结束所以排序的过程主要长这个样子
这还不直观?好吧,那么接下来我就详细的一步一步解释出来
冒泡排序大解析
首先,我们先给出一组数,就用刚刚那个幼儿园题吧
6 | 1 | 9 | 3 | 7 | 2 | 9 |
很好,第一步,先从第一个开始和后面比较
6 | 1 | 9 | 3 | 7 | 2 | 9 |
比较结果是6比1大,那么6和1位置互换
1 | 6 | 9 | 3 | 7 | 2 | 9 |
然后6和9比较,显然9要比6大,那么遍历的重任就落到了9身上
1 | 6 | 9 | 3 | 7 | 2 | 9 |
以此类推,因为9>3 9>7 9>2,9=9那么9就到了倒数第二(程序还是按照以前那样进行只是我懒得打那么多字了)而重任又从倒数第二个9到了最后一个9,因为他们相等,而9后没数了所以结束第一轮循环,开始第二轮
1 | 6 | 3 | 7 | 2 | 9 | 9 |
以此类推,第二轮结束应还是这样的
1 | 3 | 6 | 2 | 7 | 9 | 9 |
第三轮
1 | 3 | 2 | 6 | 7 | 9 | 9 |
第四轮
1 | 2 | 3 | 6 | 7 | 9 | 9 |
第五轮,检测到所有前数都比后数小,说明排序完成最后输出
样例代码(自己写的不知道对不对)
#include<iostream>
using namespace std ;
int main( ) {
int n,a,jige[1005];
cin>>n;
for(int i=0;i<n;i++){
cin>>jige[i];
}
for(int i=0;i<n;i++){
for(int j=0;j<n-1;j++){
if(jige[j]>jige[j+1]){
a=jige[j];
jige[j]=jige[j+1];
jige[j+1]=a;
}
}
}
for(int i=0;i<n;i++){
cout<<jige[i]<<endl;
}
return 0 ;
}
ps:先输出你一共要输出多少字,可能有些数设的不严谨,但不影响运行,同时也是开头那道题的答案。
尾声
冒泡排序说实话在十大排序法中是最好使好理解且实用的一种排序方法,而上面提到的题不只有一种办法,他其实是一个桶排序的例题,桶排序是什么?这就是我们下期的话题,这期就到这里了,如果喜欢的话请大家点赞收藏家关注,我会持续更新关于C++的各种科普,我们下期再见!
本文由stio工作室出品,请勿转载 ,有什么建议欢迎私信我的邮箱地址:jigehahaha@163.com