快速排序

来源:互联网 发布:java messagequeue 编辑:程序博客网 时间:2024/06/05 16:27
#include <iostream>using namespace std;int Partition(int *data, int length, int start, int end);int Partition2(int *data, int length, int start, int end);void quickSort(int *data, int length, int start, int end){    if (start < 0 || end < start || data == NULL)        return;    int pivot = Partition2( data,  length,  start,  end);    if (pivot > start)        quickSort(data, length, start, pivot - 1);    if (pivot < end)        quickSort(data, length, pivot + 1, end);}void swap(int &d1, int &d2){    int temp = d1;    d1 = d2;    d2 = temp;}//思路:首元素作为pivot值,将首元素放到数组末尾,然后依次将数组值与data[end]比较int Partition(int *data, int length, int start, int end){    //选第一个元素    swap(data[start], data[end]);    int small = start - 1;//是数组的坐标    for (int index = start; index != end; index++){        if (data[index] < data[end]){            small++;            if (small != index){                swap(data[index], data[small]);            }        }    }    small++;//pivot的位置    swap(data[small], data[end]);    return small;}//大话数据结构中的方案,选头元素为pivot值,在交换过程中,pivot为end或start位置上的值int Partition2(int *data, int length, int start, int end){    //三选一,将中等大小的数值放在数组的开头    int mid = (end - start) / 2 + start;    if (data[start] > data[mid])    swap(data[start], data[mid]);    if (data[mid] > data[end])    swap(data[mid], data[end]);    if (data[start] < data[mid])    swap(data[start], data[mid]);    int pivot = data[start];    //pivot值不是在end就是在start    while (end > start){        while (end > start && data[end] >= pivot)            end--;        swap(data[start], data[end]);        while (end > start && data[start] <= pivot)            start++;        swap(data[start], data[end]);    }    return start;}
0 0
原创粉丝点击