快速排序

原创 2006年06月02日 22:28:00
#include<stdio.h>
/*快速排序算法-升序
最坏情况:O(n^2),最好情况: O(n.logn)


注意privot中枢纽元是放在right-1的位置

当数组比较小时,可选用插入排序
 */

void insertionSort(int a[],int n)
{
    int j,p;
    int temp;
    for(p=1;p<n;p++)
    {
        temp=a[p];
        for(j=p;j>0&&a[j-1]>temp;j--)
            a[j]=a[j-1];
        a[j]=temp;
    }

}

void swap(int *p1, int *p2)
{
    int temp;
    temp=*p1,*p1=*p2,*p2=temp;

}

int pivotSelection(int a[],int left,int right)
/*pivot也可以用其他方法选择,这里用中值法*/
{
    int center=(left+right)/2;
    if( a[left] > a[center] )
        swap( &a[left] ,&a[center]);
    if( a[left] > a[right])
        swap( &a[left], &a[right]);
    if( a[center] > a[right] )
        swap( &a[center], &a[right]);

    swap( &a[center],&a[right-1]);
    return a[right-1];
}



void qsort(int array[],int left,int right)
{
    int i,j;
    int pivot;
    if(right-left>=2)/*若选插入排序,数组序号差可增大*/
    {
             pivot=pivotSelection(array,left,right);
            i=left,j=right-1;
            for(;;)
            {   
                while( array[++i] < pivot)
                {}
                while( array[--j] > pivot)
                {}
                if(i<j)
                    swap(&array[i], &array[j]);
                else
                    break;
            }
    swap( &array[i], &array[right-1]);
    qsort( array,left,i-1);
    qsort( array, i+1,right);
    }
    /* else
    {
         insertionSort(array+left,right-left+1);
    }
    */
      
           
}

void main()
{
    int s[]={3,5,76,333,2,75,200};
    int i;
    for(i=0;i<7;i++)
        printf("%d/n",s[i]);
    qsort(s,0,6);
    printf("------------------/n");
    for(i=0;i<7;i++)
        printf("%d/n",s[i]);
    getchar();
}

算法系列(四)排序算法中篇--归并排序和快速排序

在算法系列(三)排序算法上篇 一文中,介绍了冒泡排序,插入排序和选择排序算法。这篇文章继续讲解排序算法。 概述 冒泡排序,插入排序和选择排序算法这些算法的时间复杂度都是O(N^2),是否有更高效的排序...
  • robertcpp
  • robertcpp
  • 2016年05月30日 23:04
  • 3126

快速排序的改进

快速排序的改进 快速排序最坏情况下,要比较O(n^2)次,但平均性能为nlogn,基本达到了比较类排序所需时间的的下界。核心代码为: void qSort(int *data, int begin...
  • u013861473
  • u013861473
  • 2014年05月28日 22:24
  • 1220

结合题目讲解“快速排序算法”

根据一道快速排序算法自考题,进行学习方法上的反思,同时讲解自己对快速排序算法的理解...
  • sun15732621550
  • sun15732621550
  • 2016年10月16日 16:44
  • 2274

快速排序 图解算法过程

步骤一:划分 (1)选择数组的尾元素做为支点,支点选择方案有很多。 (2)把>=支点的元素放到右边。 (3)把...
  • collonn
  • collonn
  • 2013年12月28日 12:47
  • 5670

快速排序 过程图解

注意:此文为转载文章,原文地址为:http://www.cnblogs.com/ahalei/p/3568434.html            原作者:啊哈磊              ...
  • hrn1216
  • hrn1216
  • 2016年05月28日 19:39
  • 27358

随机化的快速排序

快排是所有排序算法中平均性能最好的一种pai
  • wangyulinyy
  • wangyulinyy
  • 2014年09月15日 18:39
  • 1276

快速排序(递归版)

快速排序是最经典的排序算法,它用途广泛,效率很高,也经常被拿来检验coder的基本功底。此篇作为快排的学习笔记。快排的基本思想快速排序是典型的分治算法,理解了快排的思想,很容易写出递归版的代码。快排分...
  • sixdaycoder
  • sixdaycoder
  • 2015年07月14日 16:20
  • 1109

PHP实现快速排序

思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递...
  • vvvbird
  • vvvbird
  • 2016年04月22日 15:54
  • 1631

什么是快速排序

什么是快速排序 快速排序简介 快速排序(英文名:Quicksort,有时候也叫做划分交换排序)是一个高效的排序算法,由Tony Hoare在1959年发明(1961年公布)。当情况良好时,...
  • miao309410364
  • miao309410364
  • 2015年06月05日 13:28
  • 780

快速排序算法原理与实现

快速排序是对冒泡排序的一种改进。它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一不部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排...
  • hu_xinxin
  • hu_xinxin
  • 2013年06月18日 15:22
  • 1495
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序
举报原因:
原因补充:

(最多只允许输入30个字)