| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2820 人关注过本帖, 1 人收藏
标题:快速排序源代码
只看楼主 加入收藏
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
结帖率:79.37%
收藏(1)
已结贴  问题点数:20 回复次数:13 
快速排序源代码
#include <stdio.h>
#include <stdlib.h>
FILE *fin,*fout;
void file_start()
{
if((fin=fopen("qsort.in","r"))==NULL)
{
printf("Cannot open this file!\n");
getchar();
exit(0);
}
if((fout=fopen("qsort.out","w"))==NULL)
{
printf("Cannot open this file!\n");
getchar();
exit(0);
}
}
void Qsort(int number[],int startPos, int endPos)
{
int i,j,temp;
temp=number[startPos];
i=startPos; j=endPos;
while(i<j)
{
while(number[j]>=temp && i<j)--j;
number[i]=number[j];
while(number[i]<=temp && i<j)++i;
number[j]=number[i];
}
number[i]=temp;
if(i-1>startPos) Qsort(number,startPos,i-1);
if(endPos>i+1) Qsort(number,i+1,endPos);
}
int main()
{
int number[100000]={0},n,i;
file_start();//方便输入输出,可以删除
fscanf(fin,"%d",&n);
for(i=0;i<n;i++)
fscanf(fin,"%d",&number[i]);
Qsort(number,0,n-1);
for(i=0;i<n;i++)
fprintf(fout,"%d ",number[i]);
system("pause");
return 0;
}
搜索更多相关主题的帖子: 源代码 
2010-12-23 19:48
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
不知道写得对不对?现在对10000个数排序是小于0.2秒的

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-12-23 19:49
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
真正的测试应该在1024000吧 我们写快排的时候测试都要着个数,应改在十秒前后

Go Go Go
2010-12-23 19:53
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
我只是说这个快排代码写得对不对

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-12-23 19:54
Devil_W
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
威 望:9
帖 子:1160
专家分:1797
注 册:2009-9-14
收藏
得分:10 
程序代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
class QuickSort{
private:
    vector<int> buf;
protected:
    int partition(int p, int r);
    void Q_Sort(int p, int r);
public:
    QuickSort(int n)
    {
        int m;
        for( int i=0; i< n; i++)
        {
        cin>>m;
        buf.push_back(m);
        }
    }
    void Sort(){ Q_Sort(0,buf.size()-1);}
    void Q_Show();
};
int QuickSort::partition( int p, int r)
{
    int x=buf.at(r);
    int i=p-1;
    for( int j=p;j<=r-1;j++)
    {
    if( buf.at(j)<=x)
    {
        i++;
        swap(buf.at(i),buf.at(j));
    }
    }
    swap(buf.at(i+1),buf.at(r));
    return i+1;
}
void QuickSort::Q_Sort(int p, int r)
{
    if( p< r)
    {
    int q=partition(p,r);
    Q_Sort(p,q-1);
    Q_Sort(q+1,r);
    }
}
void QuickSort::Q_Show()
{
    vector<int>::iterator it;
    for( it = buf.begin();it!=buf.end();it++)
    {
    cout<<*it<<" ";
    }
    cout<<endl;
}
int main()
{
    int m;
    cin>>m;
    QuickSort qs(m);
    qs.Q_Show();
    qs.Sort();
    qs.Q_Show();
    return 0;
}
2010-12-23 19:56
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:5 
程序:
程序代码:
#include<stdio.h>
#define N 30
void qsort(int a[],int start,int end)
{    
    int i,last;
    void swap(int a[],int i,int j);
    if (start>=end)return;
    swap(a,start,(start+end)/2);
    last=start;
    for(i=start+1;i<=end;i++)
        if(a[i]<a[start])
            swap(a,++last,i);
    swap(a,start,last);
    qsort(a,start,last-1);
    qsort(a,last+1,end);
}

void Quick_sort(int a[],int n)
{   
    int b=0;   
    qsort(a,b,N-1);
}
void chushihua(int a[],int n)
{    int i=0;
    for(;i<N;i++)
    a[i]=random();
}
void shuchu(int a[],int n)
{    int i=0;
    for(;i<N;i++)
    printf("%d\n",a[i]);
    printf("\n\n");
}
void swap(int a[],int i,int j)
{ int temp;
temp = a[i];
a[i] = a[j];
a[j] = temp;

}  

int main(void)
{
    //int n=10;
    int a[N];
    chushihua(a,N);
    shuchu(a,N);
    Quick_sort(a,N);
    shuchu(a,N);
    return 0;
   
}
我运行下结果,待会截图过去
随机获取N个数排序,N自己改。

Go Go Go
2010-12-23 19:57
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
回复 5楼 Devil_W
您的代码我已经看过了,但是请您评价一下,我的代码写得对吗?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-12-23 20:06
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
无语,50W个数也能1秒

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-12-23 20:08
zhaoya881010
Rank: 9Rank: 9Rank: 9
来 自:芒砀古郡
等 级:蜘蛛侠
威 望:1
帖 子:339
专家分:1177
注 册:2010-11-21
收藏
得分:0 
在Linux gcc环境下进行编译

Go Go Go
2010-12-23 20:09
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
代码:
#include <stdio.h>
#include <stdlib.h>
FILE *fout;
void Qsort(int number[],int startPos, int endPos)
{
int i,j,temp;
temp=number[startPos];
i=startPos; j=endPos;
while(i<j)
{
while(number[j]>=temp && i<j)--j;
number[i]=number[j];
while(number[i]<=temp && i<j)++i;
number[j]=number[i];
}
number[i]=temp;
if(i-1>startPos) Qsort(number,startPos,i-1);
if(endPos>i+1) Qsort(number,i+1,endPos);
}
int main()
{
long number[500000]={0},n,i;
fout=fopen("qsort.out","w");
srand((unsigned long)time(0));
scanf("%d",&n);
for(i=0;i<n;i++)
number[i]=rand()%100001;
Qsort(number,0,n-1);
for(i=0;i<n;i++)
fprintf(fout,"%ld ",number[i]);
system("pause");
return 0;
}

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-12-23 20:10
快速回复:快速排序源代码
数据加载中...
 
   



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

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