冒泡排序-普通版:
#include <iostream>
using namespace std;
int a[1001], n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n - 1; i++)
for (int j = 1; j <= n - i; j++)
if (a[j] > a[j + 1])
swap(a[j], a[j + 1]);
for (int i = 1; i <= n; i++)
cout << a[i] << " ";
return 0;
}冒泡排序-优化版:
/*1.分析已知/未知2.数据定义 3.输入
4.算法实现 5.输出*/
#include<bits/stdc++.h>
using namespace std;
int a[1010];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a[i];
}
for(int i=1;i<=n-1;i++){
int flag=0;
for(int j=1;j<=n-i;j++){
if(a[j]>a[j+1]){
flag=1;
swap(a[j],a[j+1]);
}
}
if(flag==0)
break;
}
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
return 0;
}冒泡排序-题目训练:
P1116 车厢重组
https://www.luogu.com.cn/problem/P1116
选择排序:
#include <iostream>
using namespace std;
int a[1001], n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 1; i <= n - 1; i++){
int pos = i;
for (int j = i+1; j <= n; j++)
if (a[j] > a[pos])
pos=j;
swap(a[i],a[pos];
}
for (int i = 1; i <= n; i++)
cout << a[i] << " ";
return 0;
}例:输入n个数,将n个数按从小到大的顺序输出(n<=10000)。
输入样例:
8
49 38 65 97 76 13 27 49
输出样例:
13 27 38 49 49 65 76 97
插入排序:
#include <iostream>
using namespace std;
int a[1001], n;
int main() {
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
for (int i = 2; i <= n; i++){
int t=a[i];
int j=i-1;
while (a[j]>t && j>=1){
a[j+1]=a[j];
j--;
}
a[j+1]=t;
}
for(int i=1;i<=n;i++)
cout << a[i] << " ";
return 0;
}例:设n=8,数组a中8个元素是: 36,25,48,12,65,43,20,58,请用插入排序。
输入样例:
8
36 25 48 12 65 43 20 58
输出样例:
12 20 25 36 43 48 58 65
计数排序:(略)