×

排序算法

Very2 Very2 发表于2026-06-13 19:43:01 浏览678 评论0

抢沙发发表评论

冒泡排序-普通版

#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


计数排序:(略)


二者

访客