C/C++实现各类排序算法(未完)
快速排序:
void quick_sort(int a[],int low,int high) { int i=low,j=high,tmp=a[low]; //tmp存储基准元素,相当于空出一个用于调动的动态位置 if(low<high) { while(i!=j) { while(j>i&&a[j]>=tmp) j--; a[i]=a[j]; //此时a[j]空出 while(j>i&&a[i]<=tmp) i++; a[j]=a[i]; //a[i]空出 } a[i]=tmp; //此时i=j,将基准元素放入此“中间”位置 quick_sort(a,low,i-1); quick_sort(a,i+1,high); }
冒泡排序:
void bubble_sort(int a[], int n) {int i, j, temp; for (j = 0; j < n - 1; j++) for (i = 0; i < n - 1 - j; i++) if(a[i] > a[i + 1]) {temp=a[i]; a[i]=a[i+1]; a[i+1]=temp;} }
插入排序:
#include<iostream> using namespace std; void insertsort(int arr[],int length) { for (auto j = 2; j < length; j++) { int i = j - 1; int key = arr[j]; while (i >= 0 && arr[i]>key) { arr[i + 1] = arr[i]; i--; } arr[i + 1] = key; } } int main() { int iarr[] = { 5,2,4,6,1,3 }; int len = sizeof(iarr) / sizeof(iarr[0]); insertsort(iarr, len); for (int i = 0; i < len;i++) { cout << iarr[i]<< endl; } return 0; }
归并排序:
#include<iostream> #define MAX 2147483647 using namespace std; void Merge(int *a, int low, int mid, int high) { int n = mid - low + 1; int m = high - mid ; int* l = new int [n+1]; auto r = new int [m+1]; for (int i = 0; i < n; i++) { l[i] = a[low + i]; } for (int i = 0; i < m; i++) { r[i] = a[mid + i+1]; } l[n] = MAX; r[m] = MAX; for (int k = low,i=0,j=0; k <= high; k++) { if (l[i] <= r[j]) { a[k] = l[i]; i++; } else { a[k] = r[j]; j++; } } delete [] l; delete [] r; } void MergeSort(int *a, int low, int high) { if (low < high) { int mid = (low + high) / 2; MergeSort(a, low, mid); MergeSort(a, mid+1, high); Merge(a, low, mid, high); } } int main() { int a[] = {3,2,1,6,4,5}; int len = sizeof(a) / sizeof(a[0]); MergeSort(a, 0, len-1); for (int i = 0; i < len; ++i) { cout << a[i] << ' '; } cout << endl; return 0; }