程序如下。 问题:运行时间为0。(本不该为0) 那位高手帮小弟改一下好吗? 先谢谢过!!!!!!! #include<iostream.h> #include<stdlib.h> #include<time.h> #include<stdio.h>
const int n=100000; typedef struct{ int key; }RedType;
typedef struct{ RedType *r; //r[n+1]; int length; }SqList;
int random(); int partition(SqList &L,int low,int high); void main(){ int m; SqList L; L.r = new RedType[n+1]; L.length=n; for(int i=1;i<=n;i++) L.r[i].key=random(); long t1,t2; t1=clock(); partition(L,n,m); t2=clock(); cout<<" 时间: "<<float(t2-t1)/CLK_TCK<<endl; } int random(){ int A=48271; int M=2147483646; int Q=M/A; int R=M%A; static int x=1; int x1; x1=A*(x%Q)-R*(x/Q); if(x1>=0) x=x1; else x=x1+M; return x; }
int partition(SqList &L,int low,int high){ //快速排序 //交换顺序表L中子表r[low..high]的记录,枢轴记录到位,并返回其所在位置,此时在它之前(后)的//记录均不大(小)于它. L.r[0]=L.r[low]; int pivotkey; //用子表的第一个记录作枢轴记录 pivotkey=L.r[low].key; //枢轴记录关键字 while(low<high){ //从表的两端交替的向中间扫描 while(low<high&&L.r[high].key>=pivotkey) --high; L.r[low]=L.r[high]; //将枢轴记录小的记录移到低端 while(low<high&&L.r[low].key<=pivotkey) --low; L.r[high]=L.r[low]; //将枢轴记录大的记录移到高端 } L.r[low]=L.r[0]; //枢轴记录到位 return low; //返回枢轴位置 }// partition