标题:为什么经过快速排序后数列还是无序的?
只看楼主
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
得分:0 
上面解悉这个程序就是,只要你的空间足够大,就可以用这个程序
将你要输入的大小看作指针A
首先将初始化数组a[],全部为0
在a[A]基础上加一,最后for()遇>0输出

小代码,大智慧
2011-01-09 14:49
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
这个是什么程序?选择排序吗?

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-09 15:03
点线面
Rank: 8Rank: 8
来 自:NO.-1
等 级:蝙蝠侠
帖 子:525
专家分:980
注 册:2011-1-3
得分:0 
类似于桶排序

小代码,大智慧
2011-01-09 15:09
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
找到了pascal代码,并且测通过了:
program fruit;
 var
     a:array[0..15000] of longint;
     i,j,n,k,tem,sum:longint;
 
 procedure init;
 begin
     readln(n);
    for i:=1 to n do
        read(a[i]);
end;

procedure qsort(left,right:integer);  
var i,j,x,t:longint;
begin
   i:=left;  j:=right;
   x:=a[i];
   repeat
     while (a[j]<x)and(i<j) do dec(j);
     if i<j then
     begin
       t:=a[i]; a[i]:=a[j];a[j]:=t;inc(i);
     end;
     while (a[i]>x)and(j>i) do inc(i);
     if i<j then
     begin
       t:=a[i]; a[i]:=a[j];a[j]:=t;dec(j);
     end;
   until i=j;
   inc(i);dec(j);
   if i<right then qsort(i,right);
   if j>left then qsort(left,j);
end;

procedure work;  //合并果子并不断维护数组
begin
   sum:=0;
   while n>=2 do
   begin
        tem:=a[n]+a[n-1];
        sum:=sum+tem;
        j:=1;
        while a[j]>tem do j:=j+1; //插入排序
        for k:=n downto j do
            a[k+1]:=a[k];
        a[j]:=tem;
   n:=n-1;  //整理数组
   end;
end;

begin
    init;
    qsort(1,n);
    work;
    writeln(sum);
end.

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-09 16:00
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
思路差不多,但是他用的是插入排序

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-09 16:02
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
额,花了3天调试,终于AC了:
#include <stdio.h>
#include <stdlib.h>
FILE *fin,*fout;
void Qsort(int fruit[],int startPos, int endPos)
{
int i,j,temp;
temp=fruit[startPos];
i=startPos; j=endPos;
while(i<j)
{
while(fruit[j]<=temp && i<j)--j;
fruit[i]=fruit[j];
while(fruit[i]>=temp && i<j)++i;
fruit[j]=fruit[i];
}
fruit[i]=temp;
if(i-1>startPos) Qsort(fruit,startPos,i-1);
if(endPos>i+1) Qsort(fruit,i+1,endPos);
}
int main()
{
    int fruit[10000]={0},n,i,ans=0,temp=0,j=0,k=0;
    fin=fopen("fruit.in","r");
    fout=fopen("fruit.out","w");
    fscanf(fin,"%d",&n);
    for(i=0;i<n;i++)
    fscanf(fin,"%d",&fruit[i]);
    Qsort(fruit,0,n-1);  
    for(i=n-1;i>0;i--)
    {
    temp=fruit[i]+fruit[i-1];
    ans=ans+temp;
    j=0;
    while(fruit[j]>temp)j=j+1;
    for(k=n-1;k>=j;k--)
    fruit[k+1]=fruit[k];
    fruit[j]=temp;
    }
    fprintf(fout,"%d",ans);
    system("pause");
    return 0;
}


欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-09 16:14
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
得分:0 
感谢 qq1023569223和点线面

欢迎来到我的博客:http://blog..cn/noisunyuhong
2011-01-09 16:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-330801-1-1.html




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

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