C++ 排序方法
---恢复内容开始---
1.选择排序:
(1)基本思想:每一次都在所有的数字中选择最小的,将这个数字放在最前面,知道排序结束。
(2)排序过程:例子
初始:[49 38 65 97 76 13 27 49]
第一次排序:13 [38 65 97 76 49 37 49]
第二次排序:13 27 [65 97 76 49 38 49]
第三次排序:13 27 38 [97 76 49 65 49]
第四次排序:13 27 38 49 [97 76 65 49]
第五次排序:13 27 38 49 49 [97 76 65]
第六次排序:13 27 38 49 49 65 [97 76]
第七次排序:13 27 38 49 49 65 76 [97]
第八次排序:13 27 38 49 49 65 76 97
例题:输入n个数,将n个数从小到大按顺序输出
输入示例:
8
49 38 65 97 76 13 27 4
输出示例:
13 27 38 49 49 65 76 97
步骤:
1.读入数据,并将数据存放在a数组中。
2.按照选择排序的思想,实现上述操作。(不会的可以评论区问)。
3.直到n和n-1个数字排序的时候停止(排序后)。
代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,m,sum,ans,k,t,a[100000];
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
}
for(int j=1;j<=n;j++)
{
k=j;
for(int i=j+1;i<=n;i++)
{
if(a[k]>a[i])k=i;
}
if(k!=j)
{
t=a[k];a[k]=a[j];a[j]=t;
}
}
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
}
2.冒泡排序;
冒泡排序的思想与选择排序恰恰相反,其实只要掌握了两种排序中的一种,第二种也就通了。
思想:每一次,将现有的最大的一个人交换至最后一个,最后形成一个有序的队列。
例子:
加入有六个元素需要排序:
6 5 3 4 1 2
第一次排序:
6 5 3 4 1 2
5 6 3 4 1 2
5 3 6 4 1 2
5 3 4 6 1 2
5 3 4 1 6 2
5 3 4 1 2 6
第二次排序:
5 3 4 1 2 6
3 5 4 1 2 6
3 4 5 1 2 6
3 4 1 5 2 6
3 4 1 2 5 6
第三次排序;
3 4 1 2 5 6
3 1 4 2 5 6
3 1 2 4 5 6
第四次排序
1 3 2 4 5 6
1 2 3 4 5 6
第五次排序:
1 2 3 4 5 6
详细有图片;
程序:
#include<bits/stdc++.h> using namespace std; int main() { int n,i,j; int t,a[100000]; cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } for(int i=n-1;i>=1;i--) { for(int j=0;j<i;j++) { if(a[j]>a[j+1]) swap(a[j],a[j+1]); } } for(int i=0;i<n;i++) { cout<<a[i]<<" "; } }