冒泡,插入,选择,归并,快速排序的C++实现

来源:互联网 发布:mac系统优化工具 编辑:程序博客网 时间:2024/06/05 16:34
#include <iostream>#include <ctime>using namespace std;void bubbleSort(int *arr, int len) {    if(arr == NULL) return;    for (int i = 0; i < len; ++i) {        int sorted_flag = 1;        for (int j = 0; j < len - i - 1; ++j) {            if(arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;                sorted_flag = 0;            }        }        if(sorted_flag == 1) break;    }}void insertSort(int* arr, const int len) {    if(arr == NULL) return;    for (int i = 0; i < len; ++i) {        int j;        int temp = arr[i];        for (j = i; j > 0 ; --j) {            if(arr[j-1] > temp) {                arr[j] = arr[j-1];            } else {                break;            }        }        arr[j] = temp;    }}void selectSort(int * arr, const int len) {    if(arr == NULL) return;    for (int i = 0; i < len; ++i) {        int min_index = i;        for (int j = i+1; j < len; ++j) {            if(arr[min_index] > arr[j]) min_index = j;        }        int temp = arr[min_index];        arr[min_index] = arr[i];        arr[i] = temp;    }}int quickSort(int * arr, int left, int right) {    int l = left, r = right, key = arr[left];    while(l < r) {        while(l <= r && arr[l] <= key) l ++;        while(r >= l && arr[r] >= key) r --;        if(l < r) {            int temp = arr[l];            arr[l] = arr[r];            arr[r] = temp;        }    }    if(l == r || r == l-1) {        arr[left] = arr[r];        arr[r] = key;    }    return r;}void partition(int arr[], int left, int right) {    if(arr == NULL || left >= right) return;    int mid = quickSort(arr, left, right);    partition(arr, mid + 1, right);    partition(arr, left, mid - 1);}void mergeSort(int n[], int start, int end, int* temp) {    if(n == NULL) return;    if(start < end) {        int mid = (start + end) >> 1;        if(mid != start) {            mergeSort(n, start, mid, temp);            mergeSort(n, mid+1, end, temp);        }        for(int i = 0, l = start, r = mid+1; i <= end; i++) {            if (r > end || l <= mid && n[l] <= n[r])                temp[i] = n[l++];            else                temp[i] = n[r++];        }        for (int i = start; i <= end; ++i) {            n[i] = temp[i - start];        }    }}void before_print(int * arr, const int len) {    cout << "before sorting: ";    for (int j = 0; j < len; ++j) {        cout << arr[j] << ' ';    }    cout << endl;}void after_print(int * arr, const int len) {    cout << "after sorting: ";    for (int j = 0; j < len; ++j) {        cout << arr[j] << ' ';    }    cout << endl;}int main() {    srand((unsigned) time(0));    const int len = 50;    const int factor = len * 5;    int * arr = new int[len];    for (int j = 0; j < len; ++j) {        arr[j] = rand() % factor;    }    before_print(arr, len);    int *temp = new int[len];    mergeSort(arr, 0, len-1, temp);    after_print(arr, len);    return 0;}
0 0
原创粉丝点击