| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 639 人关注过本帖
标题:一个快速排序的问题!那位高手看懂?
取消只看楼主 加入收藏
linmy
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2005-9-10
收藏
 问题点数:0 回复次数:0 
一个快速排序的问题!那位高手看懂?

程序如下。 问题:运行时间为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

搜索更多相关主题的帖子: color 时间 
2005-09-11 01:42
快速回复:一个快速排序的问题!那位高手看懂?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015886 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved