c++ 快速排序 双指针

快速排序 —— 左右指针法的原理:

(1)设最右值为枢轴值

(2)从左往右扫描,发现大于枢轴值的就进行位置互换

(3)从右往左扫描,发现小于枢轴值的就进行位置互换

 

#include <iostream>
#include <stdlib.h>
using namespace std;
 
/*******************************************/
/*  快速排序 —— 左右指针法
/******************************************/
 
void swap(int &a, int &b)  //位置互换函数
{
    int temp = a;
    a = b;
    b = temp;
}
 
 
int Quick(int array[], int left, int right)  //快速排序算法
{
    
    int key = right;  //枢轴key,最右值
    while (left < right)
    {
        while (left < right && array[left] <= array[key])  //从左扫描到右,发现>key就结束本次循环
        {
            ++left;  //最左值
        }
 
        while (left < right && array[right] >= array[key])  //从右扫描到左,发现<key就结束本次循环
        {
            --right;
        }
 
        swap(array[left], array[right]);  //当前左>key值和右<key值进行交换
    }
 
    swap(array[left], array[key]);  //最后一次从左扫描到右,把>key值和key值进行交换
    return left;
}

int main()
{
    int a[10] = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0];
    QuickSort(a, 0, 9);

}
 
 
void QuickSort(int array[], int left, int right)  //快速排序函数
{
    if (left < right)
    {
        int key = Quick(array, left, right);
        QuickSort(array, left, key - 1);
        QuickSort(array, key + 1, right);
    }
}

 

posted @ 2020-10-14 15:14  r1-12king  阅读(778)  评论(0编辑  收藏  举报