快速排序代码

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int RandomPartition(int *A,int beg,int end)
{
    if(A == NULL || beg>end)
    {
        exit(0);
    }
    int i=beg;
    int j=end;
    int k=beg+rand()%(end-beg+1);
    int temp=A[beg];
    A[beg]=A[k];
    A[k]=temp;
    int s=A[beg];

    while(i<j)
    {
        while(i<j && A[j]>s)
        {
            --j;
        }
        if(i<j)
        {
            A[i]=A[j];
            ++i;//注意
        }
        while(i<j && A[i]<s)
        {
            ++i;
        }
        if(i<j)
        {
            A[j]=A[i];
            --j;//注意
        }
    }
    A[i]=s;
    return i;
}

void QuickSort(int *A,int beg,int end)
{
    if(beg >= end)//注意
    {
        return;
    }
    int k=RandomPartition(A,beg,end);
    QuickSort(A,beg,k-1);
    QuickSort(A,k+1,end);
}

int main()
{
    int A[]={14,543,42,665,43,23,65,12,424};
    int len = sizeof(A)/sizeof(int);
    QuickSort(A,0,len-1);
    for(int i=0;i<len;i++)
    {
        printf("%d ",A[i]);
    }
    printf("\n");
    return 0;
}
时间: 2024-12-13 14:38:14

快速排序代码的相关文章

快速排序代码(选择最右值最为枢纽元)

        参考了<数据结构域算法分析>书上部分代码,结合自己的理解写出的快速排序程序.书上用三数中值分割法来选择枢纽元,有它的好处,但我觉得使得代码很多地方不够直观.我选择数组的最后一个元素作为枢纽元,然后实现了快排. 关于快排的原理可以去看我博客转载的文章,很直观:点击打开链接 快排的步骤就是: 1.选择枢纽元   2.将小于枢纽元的数放前面,大于枢纽元的数放后面,枢纽元放中间                  3.然后对枢纽元左右两个部分继续进行1和2   下面程序中最主要的是Qui

java冒泡排序和快速排序代码

冒泡排序: 基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换.public class BubbleSorted{ public BubbleSorted(){ int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51

快速排序代码备份

快速排序算法: // QuickSort.cpp : 定义控制台应用程序的入口点. // #include<iostream> using namespace std; template <typename T> void QSort(T* a, int n) { if (n <= 1) //记住是小于等于1 { return; } if (n == 2) { if (a[0] > a[1]) swap(a[0], a[1]); return; //记得有return

快速排序 代码

参考:http://www.cnblogs.com/luchen927/archive/2012/02/29/2368070.html快速排序采用的思想是分治思想. 举例说明一下吧,假设要排序的序列为 2 2 4 9 3 6 7 1 5 首先用2当作基准,使用i j两个指针分别从两边进行扫描,把比2小的元素和比2大的元素分开.首先比较2和5,5比2大,j左移 2 2 4 9 3 6 7 1 5 比较2和1,1小于2,所以把1放在2的位置 2 1 4 9 3 6 7 1 5 比较2和4,4大于2,

对快速排序的理解以及相关c++代码

快速排序:在一组数据中,可以将左边的数字当作枢轴(右边也可以),接下来要做的就是,先从右边找到比枢轴小的数, 再从左边找到比枢轴大的数,接着将这两个数进行交换,重复上述步骤找出所有符合条件的数进行交换, 最后将枢轴放到比枢轴大的数与比枢轴小的数之间.之所以要从右边开始找,并且找到比枢轴小的数是因为交换后小的数就在枢轴的左边了. 下面举个比较特殊的例子希望能增加理解. 1 9 8 5 6 7 3 2 0 4 先从右往左找到比1小的第一个数字为0,此时的索引位置j=8,再从左往右找到比1大的第一个数

白话排序算法--快速排序

前言: 写到快速排序时,之前已经进行了冒泡.选择.插入排序,发现算法问题很多东西都是和实际问题相逆的,实际你可能会由外及里,由上及下,可是算法里面它有时就需要你由里往外去扩散,好比最里面的是小成果,然后一次次往外变化,成果也慢慢变大,最后直至达到最终成果为止.本篇快速排序方法因为调用了递归,你就可以逆着由里及外来思考问题. 写这篇文章光画图就花费了我2小时时间,越抽象就越不好形容和比喻,画的不好,希望各位不要吐槽. 快速排序:先快速排序将队列一分为二,然后对每个队列进行递归调用快速排序方法,直至

快速排序总结

数据结构之排序算法——快速排序 代码很多地方借鉴了  http://my.csdn.net/MoreWindows 他的思想, 本人认为该作者已经写的很好了,只是在他的基础上加入了一些自己的理解和说明 如果涉及到版权的问题,请联系我的邮箱,我会尽快删除 希尔排序想关链接: 维基百科:https://zh.wikipedia.org/wiki/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F#C.E8.AA.9E.E8.A8.80 百度百科:http://baike.bai

划分算法与快速排序

原文链接:http://www.orlion.ga/201/ 一.划分算法 1.划分 划分是快速排序的根本机制.划分数据就是把数据分成两组,所有大于特定值的数据在一组,所有小于特定值的在一组.比如将{3,1,9,0,4,7,2,6,5,8}以特定值为5划分为{3,1,0,4,5}和{9,0,7,6,8} 2.划分算法 划分算法由两个指针来完成,这两个指针分别指向数组的两头,左指针leftPtr向右移动而右指针rightPtr向左移动,实际上leftPtr和rightPtr初始化时是在左右边的各减

啊哈!算法之快速排序与桶排序

啊哈!算法之快速排序与桶排序 1.快速排序算法 快速排序由 C. A. R. Hoare(东尼·霍尔,Charles Antony Richard Hoare)在1960 年提出,之后又有许多人做了进一步的优化.在数列种随机找出一个基准数,因为数列是杂乱的,所以取首项为基准数.从后往前找到比基准数大的位置,再从前往后找到比基准数小的位置,交换元素:右游标向前移动与左游标向后移动,它们相遇时用基准数的位置与相遇的位置交换.此时原来数列以相遇的位置被划分为了两个需要排序的数列,再次执行上述过程:当左