c++实现几种常见排序算法

发布时间:2022-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了c++实现几种常见排序算法脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一、快速排序


int getPivot(vector<int>&amp; arr, int left, int right){
    int tmp = arr[left];
    while(left < right){
        while(left < right && arr[right] >= tmp){
            right --;
        }
        arr[left] = arr[right];
        while(left < right && arr[left] <= tmp){
            left ++;
        }
        arr[right] = arr[left];
    }
    arr[left]  = tmp;
    return left;
}

void quicksort(vector<int>& arr, int left, int right){
    if(left < right){
        int pivot = getPivot(arr, left, right);
        quickSort(arr,left, pivot - 1);
        quickSort(arr, pivot + 1, right);
    }
}

二、冒泡排序

void bubbleSort(vector<int>& arr){
    int size = arr.size();
    for(int i = 1; i < size; i++){
        for(int j = 0; j < size - i; j++){
            if(arr[j] > arr[j + 1]){
                swap(arr[j], arr[j + 1]);
            }
        }
    }
}

三、堆排序

void adjustHeap(vector<int>& arr, int start, int end){
    int parent = start;
    int child = start*2 + 1;
    while(child <= end){
        if(child + 1 <= end && arr[child] < arr[child + 1] ){
            child++;
        }
        if(arr[parent] > arr[child]){
            return;
        }
        swap(arr[parent], arr[child]);
        parent = child;
        child = child * 2 + 1;
    }
}
void heapSort(vector<int>& arr){
    int size = arr.size();
    for(int i = size/2 - 1; i >= 0; i--){
        adjustHeap(arr, i, size - 1);
    }
    for(int i = size - 1; i >= 0; i--){
        swap(arr[0], arr[i]);
        adjustHeap(arr, 0, i - 1);
    }
}

四、归并排序

void merge(vector<int>& arr, int left, int mid, int right){
    vector<int> tmp;
    int i = left, j = mid + 1;
    while(i <= mid && j <= right){
        if(arr[i] < arr[j]){
            tmp.emplace_back(arr[i++]);
        }else{
            tmp.emplace_back(arr[j++]);
        }
    }
    while(i <= mid){
        tmp.emplace_back(arr[i++]);
    }
    while(j <= right){
        tmp.emplace_back(arr[j++]);
    }
    int m = left;
    int n = 0;
    while(m <= right){
        arr[m++] = tmp[n++];
    }
}

void mergeSort(vector<int>& arr, int left, int right){
    if(left >= right) return;
    int mid = left + ((right - left) >> 1);
    mergeSort(arr, left, mid);
    mergeSort(arr, mid + 1, right);
    merge(arr, left, mid, right);
}

脚本宝典总结

以上是脚本宝典为你收集整理的c++实现几种常见排序算法全部内容,希望文章能够帮你解决c++实现几种常见排序算法所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。