冒泡排序

若得到一个从小到大的数组
例如: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;
}

posted on 2024-04-17 22:18  fafrkvit  阅读(3)  评论(0编辑  收藏  举报