冒泡排序
若得到一个从小到大的数组
例如:3 5 2 7 4 8 1
角标:1 2 3 4 5 6 7
就是角标1和角标2比,若1大于2,就交换位置,然后角标2和角标3比,若2大于3,就交换位置
第一趟:
3 2 5 4 7 1 8
第二趟:
2 3 4 5 1 7 8
以此类推。。。。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define N 100
int main() {
int a[N];
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int j = 1; j <= n; j++) {
for (int i = 1; i <= n - j; i++) {
if (a[i] > a[i + 1]) {
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
for(int i=1;i<=n;i++){
cout<<a[i]<<' ';
}
return 0;
}
//注意数组的起始位置,和冒泡排序的含义
/*第一个循环是排序的次数,第二次是具体排序的过程,每排一次序就可以有一个数归位
所以下一次排序时就可以少进行一次比较*/
选择排序:
比如:5 6 3 5 1 2
角标:1 2 3 4 5 6
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define N 100
//选择排序,从大到小
int main() {
int a[N];
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
cin >> a[i];
}
for (int i = 1; i <= n; i++) {
for (int j = 0; j <= n ; j++) {
if (a[i] > a[j]) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
}
}
for (int i = 1; i <= n; i++) {
cout << a[i]<<' ';
}
return 0;
}