C++实现各种排序以及复杂度,稳定性分析
生活随笔
收集整理的這篇文章主要介紹了
C++实现各种排序以及复杂度,稳定性分析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
代碼如下:
#include<iostream> using namespace std;void Bubble_Sort(int *a, int n) {bool flag;int tmp = 0;for (int i = n - 1; i >= 0; i--){flag = false;for (int j = 0; j < i; j++){if (a[j] > a[j + 1]){swap(a[j], a[j + 1]);flag = true;}}if (!flag) break;} }int partition(int *a, int low, int high) {int point = a[low];while (low < high){while (low < high && a[high] >= point){high--;}swap(a[low], a[high]);while (low < high && a[low] <= point){low++;}swap(a[low], a[high]);}return low; }void quicksort(int *a, int low, int high) {if (low < high){int point = partition(a, low, high);quicksort(a, low, point - 1);quicksort(a, point + 1, high);} }void Quick_Sort(int *a, int n) {quicksort(a, 0, n - 1); }void Insertion_Sort(int *a, int n) {int tmp;int j;for (int i = 1; i < n; i++){tmp = a[i];for ( j = i; j > 0 && a[j - 1] > tmp; j--){a[j] = a[j - 1];}a[j] = tmp;} }void Shell_Sort(int *a, int n) {int tmp;int j;for (int d = n / 2; d > 0; d /= 2){for (int i = d; i < n; i++){tmp = a[i];for ( j = i; j >= d && a[j - d] > tmp; j -= d){a[j] = a[j - d];}a[j] = tmp;}} }void merge(int *a, int mid, int low, int high) {int i = low;int j = mid + 1;int k = 0;int *w = new int[high - low + 1];while (i <= mid && j <= high){if (a[i] < a[j]) w[k++] = a[i++];else w[k++] = a[j++];}while (i <= mid) w[k++] = a[i++];while (j <= high) w[k++] = a[j++];for (int i = low, j = 0; i <= high; i++, j++) a[i] = w[j];delete[] w; }void mergesort(int *a, int low, int high) {if (low < high){int mid = (low + high) >> 1;mergesort(a, low, mid);mergesort(a, mid + 1, high);merge(a, mid, low, high);} }void Merge_Sort(int *a, int n) {mergesort(a, 0, n - 1);}void Selection_Sort(int *a, int n) {int min;for (int i = 0; i < n; i++){min = i;for (int j = i + 1; j < n; j++){if (a[j] < a[min])min = j;}if (min != i){swap(a[min], a[i]);}} }void percDown(int *a,int p,int n) {int parent, child;int x = a[p];for (parent = p; (parent * 2+1) < n; parent = child){child = 2 * parent+1;if (child != n-1 && a[child] < a[child + 1]){child++;}if (x >= a[child]) break;else a[parent] = a[child];}a[parent] = x;}void Heap_Sort(int *a, int n) {for (int i = n / 2 - 1; i >= 0; i--){percDown(a, i, n);}for (int i = n - 1; i > 0; i--){swap(a[0], a[i]);percDown(a, 0, i);} }void printElem(int *a,int n) {for (int i = 0; i < n; i++){cout << a[i] << " ";}cout << endl; }void updataElem(int *a, int *b,int n) {for (int i = 0; i < n; i++){a[i] = b[i];} }int main() {int a[] = { 213,432,213,64,5,532,412,3,12412,312 };int b[] = { 213,432,213,64,5,532,412,3,12412,312 };Bubble_Sort(a, 10);//冒泡排序printElem(a,10);updataElem(a, b,10);Quick_Sort(a, 10);//快速排序printElem(a, 10);updataElem(a, b, 10);Insertion_Sort(a, 10);//插入排序printElem(a, 10);updataElem(a, b,10);Shell_Sort(a, 10);//普通希爾排序printElem(a, 10);updataElem(a, b, 10);Merge_Sort(a, 10);//歸并排序printElem(a, 10);updataElem(a, b,10);Heap_Sort(a, 10);//堆排序printElem(a, 10);updataElem(a, b, 10);Selection_Sort(a, 10);//選擇排序printElem(a, 10);return 0; }復雜度以及穩定性分析:
總結
以上是生活随笔為你收集整理的C++实现各种排序以及复杂度,稳定性分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深信服开发了一款监控你电脑的软件深信服开
- 下一篇: 电脑如何精准搜索(怎么在电脑上找百度搜索