现在的位置: 首页 > 综合 > 正文

快速排序 调了好些天,想了好几天,终于想通了!以及用舍伍德型概率算法改进的快速排序

2013年09月13日 ⁄ 综合 ⁄ 共 1523字 ⁄ 字号 评论关闭

//快速排序

#include<stdio.h>
#define MAX 1024
int a[MAX];
void init(int b[],int n)
{
  for(int i=0;i<n;i++)
    a[i+1]=b[i];
}
//4,1,2,6,2,3,5,9,0
void qsort(int a[],int low,int high)
{
  int i,j;
  if(low<high)
    {
      i=low;
      j=high;
      a[0]=a[i];
  while(i<j)
    {
      while(i<j && a[0]<a[j]) j--;
      if(i<j)
    {
      a[i]=a[j];
      i++;
    }
      while(i<j && a[0]>a[i]) i++;
      if(i<j)
    {
      a[j]=a[i];
      //      i++;
      j--;
    }
    }
  a[i]=a[0];
  qsort(a,low,i-1);
  qsort(a,i+1,high);
    }
}
void display(int b[],int n)
{
  for(int i=1;i<=n;i++)
    printf("%d ",b[i]);
  printf("/n");
}
int main()
{
  int b[]={4,1,2,6,2,3,5,9,0};
  int n=9;
  int low=1;
  init(b,n);
  display(a,n);
  qsort(a,low,n);
  display(a,n);
  return 0;
}

 

 

 

用舍伍德型概率算法改进的快速排序

#include<stdio.h>
#include<stdlib.h>
#define MAX 1000004
int Random(int a,int b)
{
  return rand()%(b-a)+a; //生成随机数
}

void qqsort(int a[],int low,int high)
{
  int i,j,x,k,temp;
  if(low<high)
    {
      i=low;
      j=high;
      k=Random(i,j);
      if(i!=k)
     {
      temp=a[i];
      a[i]=a[k];
      a[k]=temp;
     }
      x=a[i];//随机选择标志位
      while(i<j)//i=0,j=10
    {
      while(i<j && x<a[j])
        { j--;}
      if(i<j )
        {
          a[i]=a[j];
          i++;
        }
      while(i<j && x>a[i])
        {i++;}
      if(i<j)
        {
          a[j]=a[i];
          j--;
        }
    }
      a[i]=x;
      qqsort(a,low,i-1);
      qqsort(a,i+1,high);
    }
}
void display(int a[],int high)
{
  for(int i=0;i<=high;i++)
    printf("%d ",a[i]);
  printf("/n");
}
int main()
{
  int a[MAX];
  int n;
  scanf("%d",&n);
  for(int i=0;i<n;i++)
    {
      scanf("%d",&a[i]);
    }
   int low=0,high=n-1;
   //   display(a,high);
   qqsort(a,low,high);
   display(a,high);
   return 0;
}

抱歉!评论已关闭.