快速排序-分治算法

来源:互联网 发布:淘宝网店出售 编辑:程序博客网 时间:2024/06/09 21:05
基本思想:将数组A[1...n]划分为两个子数组A[1...p]和A[p+1...n],使得前子数组中的元素均不大于后子数组中的元素,然后分别对这两个数组进行排序,最后再合并为一个有序数组。

复杂度分析
这里写图片描述

// quick_sort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <algorithm>using namespace std;#define N 7int A[N] = {0, 4,1,2,7,5,3 };/*    被划分的数组为A[m...p-1],*/void Partion(int m, int &p){    int i=m+1;    p--;    int v = A[m];//被选定的划分元素    while (true)    {        while (A[i] <= v)            i++;        while (A[p] > v)            p--;        if (i < p)            swap(A[i], A[p]);        else            break;    }    A[m] = A[p];    A[p] = v;   //把划分元素移动到适当位置}void QuickSort(int p, int q){    if (p < q)    {        int j = q + 1;        Partion(p, j);        QuickSort(p, j - 1);        QuickSort(j + 1, q);    }}int main(){    printf("快速排序前:\n");    for (int i = 1; i < N; i++)        printf("%d\t", A[i]);    printf("\n\n\n**************************************************\n快速排序后:\n\n");    QuickSort(1, N-1);    for (int i = 1; i < N; i++)        printf("%d\t", A[i]);    printf("\n\n\n\n");    return 0;}

这里写图片描述

0 0