快速排序(QuickSort)以及C++随机数的生成

来源:互联网 发布:新机电脑测试软件 编辑:程序博客网 时间:2024/04/28 01:38

    快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想——分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小小的程序方面的考试如软考,考研中也常常出现快速排序的身影。

一、算法思想:

    实现快速排序算法的关键在于数组中选择一个数字,接下来把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组中的右边。

    用递归实现快速排序。

二、算法实现

1、分治函数:

#include "stdafx.h"#include <stdlib.h>#include <exception>// Random Partitionint RandomInRange(int min, int max){    int random = rand() % (max - min + 1) + min;    return random;}void Swap(int* num1, int* num2){    int temp = *num1;    *num1 = *num2;    *num2 = temp;}int Partition(int data[], int length, int start, int end){    if(data == NULL || length <= 0 || start < 0 || end >= length)        throw new std::exception("Invalid Parameters");    int index = RandomInRange(start, end);//产生随机数,让避免特殊的数组,使算法更加接近O(nlog n)    Swap(&data[index], &data[end]);    int small = start - 1;    for(index = start; index < end; ++ index)    {        if(data[index] < data[end])        {            ++ small;            if(small != index)                Swap(&data[index], &data[small]);        }    }    ++ small;    Swap(&data[small], &data[end]);    return small;}

2。递归实现

void QuickSort(int data[], int length, int start, int end){if (start == end)return;int index = Partition(data, length, start, end);if (index > start){QuickSort(data, length, start, index - 1);}if (index < end){QuickSort(data, length, index + 1, end);}}
                                             
0 0