快速分类递归算法改写成迭代算法

来源:互联网 发布:吉林市网络医院 编辑:程序博客网 时间:2024/05/12 03:10

快速分类递归算法改写成迭代算法

/*将data[low, high]进行快速分类的迭代算法(WIN-TC1.9.1k中文DOS环境调试通过)*/
#include "stdio.h"
#include "conio.h"
#define n 8
void output(int *data)
{ int i;
  printf("数组中的元素为:/n");
  for(i=0;i<n;i++)
    printf("%d/n",data[i]);
}

int Partition(int *data, int low, int high)
{ int i,j,t,r,k;
  r=data[low]; j=low+1; k=high;
    while(1)
    {  while((j<=k)&&(data[j]<=r)) j++;
       while((j<=k)&&(data[k]>=r)) k--;
       if(j<k){ t=data[j]; data[j]=data[k]; data[k]=t; j++; k--; }
       else break;
    }
    data[low]=data[k]; data[k]=r ;
    return k;
}

int QSort(int *data, int low, int high)
{ int stack[2*n][2];
  int i,top=0,t1,t2;
  top++;
  stack[top][0]=low;
  stack[top][1]=high;
  while(top!=0)
  {
    t1=stack[top][0];
    t2=stack[top][1];
    top--;
    i=Partition(data,t1,t2);
    if(t1<i-1)
    {
      top++;
      stack[top][0]=t1;
      stack[top][1]=t2;
    }
    if(i+1<t2)
    {
      top++;
      stack[top][0]=i+1;
      stack[top][1]=t2;
    }
  }
}

main()
{
    int i,t,data[n];
    for(i=0;i<n;i++)
      {
        printf("/n输入第 %d 个元素:",i+1);
        scanf("%d",&data[i]);
      }
    output(data);
    QSort(data,0,n-1);
    output(data);
    getch();
}