标签:col 时间 思想 复杂 pre 时间复杂度 选择 turn class
对于数组的排序,常用的有四种,分别是冒泡法,选择法,插入法和快速排序法。前三个的时间辅助度都是O(x2),快速排序的时间复杂度是O(nlogn)。
冒泡法
#include<iostream> using namespace std; int main() { int n, i, j; cin >> n; int a[n]; for(i = 0; i < n; i++) cin >> a[i]; for(i = 1; i < n; i++) { for(j = 0; j < n - i; j++) { if(a[j] > a[j+1]) swap(a[j],a[j+1]); } } for(i = 0; i < n; i++) cout << a[i] << " "; }
选择法
#include<iostream> using namespace std; int main() { int n, i, j; cin >> n; int a[n]; for(i = 0; i < n; i++) cin >> a[i]; for(i = 0; i < n - 1; i++) { for(j = i + 1; j < n; j++) { if(a[i] > a[j]) swap(a[i],a[j]); } } for(i = 0; i < n; i++) cout << a[i] << " "; }
插入法
#include<iostream> using namespace std; int main() { int n, i, j; cin >> n; int a[n]; for(int i = 0; i < n; i++) cin >> a[i]; for(i = 1; i < n; i++) //从第二个数开始判断,知道第n个数 { int x = a[i]; for(j = i - 1; j >= 0 && a[j] >= x; j--) //从第i-1个数开始往前推,遇到比x大的数或者j==-1就退出循环 { if(a[j] >= x) a[j+1] = a[j]; } a[j+1] = x; } for(i = 0; i < n; i++) cout << a[i] << " "; }
快速排序法运用递归的思想二分数组直到左下标大于右下标
#include <bits/stdc++.h> using namespace std; void dfs(int a[],int left, int right) { if(left < right) return; int t = a[left]; int i = left, j = right; while(i != j) { while(i < j && t <= a[j]) j--; a[i] = a[j]; while(i < j && t >= a[i]) i++; a[j] = a[i]; } a[i] = t; dfs(a,left,i-1); dfs(a,i+1,right); } int main() { int n; cin >> n; int a[n]; for(int i = 0; i < n; i++) cin >> a[i]; int left = 0, right = n - 1; dfs(a, left, right); for(int i = 0; i < n; i++) cout << a[i]; return 0; }
标签:col 时间 思想 复杂 pre 时间复杂度 选择 turn class
原文地址:https://www.cnblogs.com/123L/p/12399028.html