快速排序

原创 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();
}

相关文章推荐

快速排序代码

  • 2016年06月14日 14:08
  • 2KB
  • 下载

简单的快速排序

  • 2015年01月23日 09:57
  • 479B
  • 下载

快速排序[平均时间复杂度O(NlogN)]

基本思想: 假设我们现在对“6 1 2 7 9 3 4 5 10 8”这10个数进行排序。首先在这个序列中随便找一个数作为基准数。为了方便,就让第一个数6作为基准数。分别从初始序列“6 1 2 7 9...

快速排序算法

  • 2015年05月01日 16:41
  • 1KB
  • 下载

C#快速排序练习

  • 2017年06月20日 11:40
  • 30KB
  • 下载

算法导论 - QuickSort 快速排序 C++实现

算法导论的快速排序还和一般书上的快速排序是有点不一样的。 当然书习题也给出了一般快速排序的方法,其分区函数学名叫Hoare partition。 书本介绍的排序可以用图看的很清晰: 然后配合C++...
  • kenden23
  • kenden23
  • 2013年11月09日 10:32
  • 12972

快速排序原创数据(20组)

  • 2015年10月30日 21:48
  • 7.57MB
  • 下载

Python递归实现快速排序

快速排序(QuickSort)是对冒泡排序的一种改进: 基本思想: 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部...

冒泡归并和快速排序java源码

  • 2016年05月11日 20:30
  • 2KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速排序
举报原因:
原因补充:

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