选择排序、插入排序、冒泡排序、快速排序、归并排序和希尔排序代码

#include<iostream>
#include<algorithm>
#include<ctime>
using namespace std;
#define random(a,b) (rand()%(b-a+1)+a)
void print_array(int *a);
void quick_sort(int *a, int l, int r){
    int temp;
    int i = l;
    int j = r;
    if(l <r ){
        temp = a[l];
        while(i != j){
            while(j > i && a[j] > temp){
                --j;
            }
            if(i < j){
                a[i] = a[j];
                ++i;
            }
            while(i < j && a[i] < temp){
                ++i;
            }
            if(i < j){
                a[j] = a[i];
                --j;
            }
        }
        a[i] = temp;
        quick_sort(a, l, i-1);
        quick_sort(a, i+1, r);
    }
}
void bubble_sort(int *a, int len){
    for(int i = 0; i < len - 1; i++){
        for(int j = 0; j < len - 1 -i; j++){
            if(a[j] > a[j+1]){
                a[j]^=a[j+1]^=a[j]^=a[j+1];
            }
        }
    }
}
void select_sort(int *a, int len){
    int temp=0, index=0;
    for(int i = 0; i < len; i++){
        temp = a[i];
        for(int j = i+1; j< len; j++){
            if(temp > a[j]){
                temp = a[j];
                index = j;
            }
        }
        a[index] = a[i];
        a[i] = temp;
    }
}
void insert_sort(int *a, int len){
    for(int i = 1; i < len; i++){
        int temp = a[i];
        int j = 0;
        for(j = i -1; j >= 0 && temp < a[j]; j--){
            a[j+1]=a[j];
        }
        a[j+1]=temp;
    }
}
void merge_sort(int *a, int b[], int left, int right){
    if(right - left > 1){
        int mid = (left + right)/2;
        int l = left, r = mid, i = left;
        merge_sort(a, b, left, mid);
        merge_sort(a, b, mid, right);
        while(l < mid || r < right){
            if(r >= right || (l < mid && a[l] < a[r])){
                b[i++] = a[l++];
            }else{
                b[i++] = a[r++];
            }
        }
        for(int j= left; j < right; j++){
            a[j] = b[j];
        }
    }
}
void shell_sort(int *a, int len, int dk){
    for(int i = dk; i < len; i++){
        int temp = a[i];
        int j = 0;
        for(j = i -dk; j >= 0 && temp < a[j]; j-=dk){
            a[j+1]=a[j];
        }
        a[j+1]=temp;
    }
}
void rand_array(int *a){
    for(int i = 0; i < 20; i++){
        a[i] = random(0,100);
    }
}
void print_array(int *a){
    for(int i = 0; i < 20; i++){
        cout << a[i] << " ";
    }
    cout << endl;
}
int main(){
    /*快速排序*/
    int a[20];
    cout<<"快速排序:";
    rand_array(a);
    print_array(a);
    quick_sort(a, 0, 19);
    print_array(a);
    /*冒泡排序*/
    cout<<"冒泡排序:";
    rand_array(a);
    print_array(a);
    bubble_sort(a, 20);
    print_array(a);
    /*选择排序*/
    cout<<"选择排序:";
    rand_array(a);
    print_array(a);
    select_sort(a, 20);
    print_array(a);
    /*插入排序*/
    cout<<"插入排序:";
    rand_array(a);
    print_array(a);
    insert_sort(a, 20);
    print_array(a);
    /*归并排序*/
    cout<<"归并排序:";
    rand_array(a);
    print_array(a);
    int b[20];
    merge_sort(a, b, 0, 20);
    print_array(a);
    /*希尔排序*/
    cout<<"希尔排序(n小的时候可以排,大的时候重新选择间距):";
    rand_array(a);
    print_array(a);
    int n = 20;
    while(n/2 != 1){
        shell_sort(a, 20, n/2);
       n/=2;
    }
    shell_sort(a, 20, 1);
    print_array(a);
}

猜你喜欢

转载自blog.csdn.net/dreamzuora/article/details/80925555