C++学习日记/4类排序算法

来源:互联网 发布:雨人软件 编辑:程序博客网 时间:2024/06/08 14:50
#include <iostream>using namespace std;void Swap(int& a, int& b){    int tmp = a;    a = b;    b = tmp;}void print(int* arr, int len){    for(int i = 0; i < len; i++){        cout<<arr[i]<<", ";    }    cout<<endl;}void sort1(int *arr, int len){    bool flag;    for(int i = 0; i < len; i++){        flag = true;        for(int j = 1; j < len-i; j++){            if(arr[j-1] > arr[j]){                Swap(arr[j-1], arr[j]);                flag = false;            }        }        if(flag){            break;        }    }}void sort2(int* arr, int len){    bool flag;    for(int i = 0; i < len; i++){        flag = true;        for(int j = len-1; j > i; j--){            if(arr[j] < arr[j-1]){                Swap(arr[j], arr[j-1]);                flag = false;            }        }        if(flag){            break;        }    }}void sort3(int* arr, int len){    int Min;    int index;    bool flag;    for(int i = 0; i < len; i++){        Min = arr[i];        index = i;        flag = false;        for(int j = i; j < len; j++){            if(j == i){                continue;            }            if(arr[j] < Min){                Min = arr[j];                index = j;                flag = true;            }        }        if(flag){            Swap(arr[i],  arr[index]);        }    }}int get_index(int* arr, int left, int right){    int index = arr[left];    while(left < right){        while(left<right && arr[right]>index){            right--;        }        if(left < right){   //交换的前提            Swap(arr[left], arr[right]);            left++;     //减去和之前交换过index小的数再比较一次        }        while(left<right && arr[left]<=index){            left++;        }        if(left < right){            Swap(arr[left], arr[right]);            right--;    //减去和之前交换过index小的数再比较一次        }    }    return left;}void quick_sort(int* arr, int left, int right){    int index;    if(left < right){        index = get_index(arr, left, right);        quick_sort(arr, index+1, right);        quick_sort(arr, left, index-1);    }else{        return;    }}int main(){    //定义一维数组长度    const int len = 10;    //定义arr1一维数组    int arr1[len] = {3,1,2,4,5,0,9,8,6,7};    //sort3 测试    print(arr1, len);    sort3(arr1, len);    print(arr1, len);    //sort2()    int arr2[len] = {3,1,2,4,5,0,9,8,6,7};    print(arr2, len);    sort2(arr2, len);    print(arr2, len);    //sort1()    int arr3[len] = {3,1,2,4,5,0,9,8,6,7};    print(arr3, len);    sort1(arr3, len);    print(arr3, len);    cout<<"--------------------------------------"<<endl;    //再测试    int arr_0[len] = {0,1,2,3,4,5,6,7,8,9};    print(arr_0, len);    sort1(arr_0, len);    print(arr_0, len);    int arr_1[len] = {0,1,2,3,4,5,6,7,8,9};    print(arr_1, len);    sort2(arr_1, len);    print(arr_1, len);    int arr_2[len] = {0,1,2,3,4,5,6,7,8,9};    print(arr_2, len);    sort3(arr_2, len);    print(arr_2, len);    cout<<"-------------------------------------"<<endl;    //再测试    int arr_a[len] = {10,9,8,7,6,5,4,3,2,1};    print(arr_a, len);    sort1(arr_a, len);    print(arr_a, len);    int arr_b[len] = {10,9,8,7,6,5,4,3,2,1};    print(arr_b, len);    sort2(arr_b, len);    print(arr_b, len);    int arr_c[len] = {10,9,8,7,6,5,4,3,2,1};    print(arr_c, len);    sort3(arr_c, len);    print(arr_c, len);    cout<<"-------------------------------------"<<endl;    //quick_sort()测试    int arr_A[len] = {3,1,2,4,5,0,9,8,6,7};    print(arr_A, len);    quick_sort(arr_A, 0, len-1);    print(arr_A, len);    //再测试    int arr_B[len] = {1,2,3,4,5,6,7,8,9,10};    print(arr_B, len);    quick_sort(arr_B, 0, len-1);    print(arr_B, len);    //最后测试    int arr_C[len] = {10,9,8,7,6,5,4,3,2,1};    print(arr_C, len);    quick_sort(arr_C, 0, len-1);    print(arr_C, len);}
欢迎指出错误的地方,因为是学习过程中的原代码,没有太多算法解释
原创粉丝点击