| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3039 人关注过本帖
标题:萌新求救:快速排序法设计两个对n个整数进行排序的函数。
只看楼主 加入收藏
极丶空
Rank: 1
来 自:黑龙江哈尔滨
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-5-13
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
萌新求救:快速排序法设计两个对n个整数进行排序的函数。
函数分别采用下标法、数组名法和指针法的形式编写。
顺序为从小到大排序,规定使用快速排序法。
吃着上课不听讲的苦果。。。。。
大大们救命。。三c⌒っ゚Д゚)っ

[此贴子已经被作者于2017-5-13 12:41编辑过]

搜索更多相关主题的帖子: 网络 
2017-05-13 12:25
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:7 
置顶的贴有快速排序~

编程论坛 - 常用的六种排序 https://bbs.bccn.net/thread-476336-1-1.html

至于后面两种在原基础上修改一下形式就可以了~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-13 12:59
极丶空
Rank: 1
来 自:黑龙江哈尔滨
等 级:新手上路
帖 子:5
专家分:0
注 册:2017-5-13
收藏
得分:0 
主要就是形式不明,。。上课的时候听的一半一半的。。。快速排序是会,但是数组名法和指针法,,有点蒙

当我开始努力的时候我才发现,差不多晚了。
2017-05-13 13:03
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:0 
回复 3楼 极丶空
不好意思啊~最近实在忙不过来~~就知道~~~*(a+i)和*p++这些表达形式~~~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2017-05-13 15:50
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:7 
//这两个是下标法和指针法,数组名法不知道是个什么概念。
#include<stdio.h>
void swap(int*a,int*b)
{
    int tmp;
    tmp=*a;*a=*b;*b=tmp;
}
void FastSorting1(int n[],int start,int end)
{
    int head=start,tail=end;
    int divider=n[start];
    if(start>=end) return;//递归基
    while(head<tail)
    {
        while(n[tail]>divider) tail--;
        while(n[head]<divider) head++;
        swap(&n[head],&n[tail]);
    }
    FastSorting1(n,start,head);
    FastSorting1(n,head+1,end);
}
void FastSorting2(int*n,int length)
{
    int divider=*n;
    int*head=n;int*tail=n+length-1;
    if(length<=1) return;
    while(head<tail)
    {
        while(*tail>divider) tail--;
        while(*head<divider) head++;
        swap(head,tail);
    }
    FastSorting2(n,head-n);
    FastSorting2(head,length-(head-n)-1);
}
int main()
{
    int arr[7];int i;
    printf("排序前:\n");
    for(i=0;i<7;i++)
        printf("%d,",arr[i]=(int)rand()%20);
    FastSorting1(arr,0,6);
    printf("\n排序后:\n");
    for(i=0;i<7;i++)
        printf("%d,",arr[i]);
    /*重新试过*/
    printf("\n排序前:\n");
    for(i=0;i<7;i++)
        printf("%d,",arr[i]=(int)rand()%20);
    FastSorting2(arr,7);
    printf("\n排序后:\n");
    for(i=0;i<7;i++)
        printf("%d,",arr[i]);
    return 0;
}
2017-05-13 23:10
renkejun1942
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:不是这样
等 级:贵宾
威 望:33
帖 子:1645
专家分:5297
注 册:2016-12-1
收藏
得分:7 
数组名是一个地址,在编译的时候数组名会退化为指针,so……数组名法,就是另类的指针法。区别是利用数组名+变量的方式。

09:30 05/21 种下琵琶种子,能种活么?等待中……
21:50 05/27 没有发芽。
20:51 05/28 没有发芽。
23:03 05/29 没有发芽。
23:30 06/09 我有预感,要发芽了。
2017-05-13 23:11
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 6楼 renkejun1942
那么说穿了仍旧是指针法了。
2017-05-14 08:09
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
我发现我的指针法快排有问题,对后半段递归的时候把临界点也给排进去了。临界点当排除在外,但应该加上一个后半段数组首地址是否仍在数组内的判断
2017-05-14 08:14
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
我发现我的指针法快排有问题,对后半段递归的时候把临界点也给排进去了。临界点当排除在外,但应该加上一个后半段数组首地址是否仍在数组内的判断
2017-05-14 08:34
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 6楼 renkejun1942
那么说穿了仍旧是指针法了。
2017-05-14 08:34
快速回复:萌新求救:快速排序法设计两个对n个整数进行排序的函数。
数据加载中...
 
   



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

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