| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 932 人关注过本帖
标题:关于快速排序
只看楼主 加入收藏
guliana
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-6-24
收藏
 问题点数:0 回复次数:19 
关于快速排序

\\\"快速排序\\\"法对下列数列排序(请帮我编译一个完整的程序)

7 10 8 12 14 5 3 20

搜索更多相关主题的帖子: 快速 
2006-06-24 21:48
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 

/*用库函数qsort搞定最为简便*/

#include<stdio.h>
#include<stdlib.h> /*qsort()原型*/
typedef short int Type;

int cmp(const Type* x,const Type* y)
{
return *x-*y;
}

main( )
{
Type ary[]={7,10,8,12,14,5,3,20};
int i,n=sizeof(ary)/sizeof(Type);/*确定元素有几个*/
qsort(ary,n,sizeof(Type),cmp);
for(i=0;i<n;i++)
printf("%d\t",ary[i]);
printf("\n");
}


落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-25 07:11
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
main()
{int i,j,*p,temp;
int a[8]={7,10,8,12,14,5,3,20};
p=a;
printf("sort:");
for(i=0;i<=6;i++)
{for(j=i+1;j<=7;j++)
{
if(*p>(*(p+j)))
{temp=*p;
*p=*(p+j);
*(p+j)=temp;
}
}
p++;
}
for(i=0;i<8;i++)
printf("%d",a[i]);
}

[此贴子已经被作者于2006-6-25 10:27:23编辑过]


2006-06-25 10:12
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

楼上的能排出来吗?


2006-06-25 10:17
han2y
Rank: 1
来 自:山东德州
等 级:新手上路
帖 子:175
专家分:0
注 册:2006-5-4
收藏
得分:0 
main()
{int i,j,temp;
int a[8]={7,10,8,12,14,5,3,20};
printf("sort:");
for(i=0;i<=6;i++)
for(j=i+1;j<=7;j++)
{if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
for(i=0;i<8;i++)
printf("%4d",a[i]);
}

2006-06-25 10:25
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用han2y在2006-6-25 10:25:52的发言:
main()
{int i,j,temp;
int a[8]={7,10,8,12,14,5,3,20};
printf("sort:");
for(i=0;i<=6;i++)
for(j=i+1;j<=7;j++)
{if(a[i]>a[j])
{temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
for(i=0;i<8;i++)
printf("%4d",a[i]);
}

这是冒泡排序.


#include "Stdio.h"
#include "Conio.h"

void QSort(int key[],int low,int high)
{ /*快速排序*/
int i=low,j=high,tag;

if (low<high)
{
tag=key[low];
do
{
while (j>i && key[j]>=tag)
j--;

if (i<j)
{
key[i]=key[j];
i++;
}
while (i<j && key[i]<=tag)
i++;

if (i<j)
{
key[j]=key[i];
j--;
}
}while (i<j);

key[i]=tag;
QSort(key,low,j-1);
QSort(key,j+1,high);
}
}
int main(void)
{
int key[8]={7,10,8,12,14,5,3,20};
int i=0;
QSort(key,0,7);
printf("Quick sort: ");
for (i=0;i<8;i++)
printf("%d ",key[i]);
getch();
return 0;
}
这是快速排序.


2006-06-25 10:32
–★–
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:1512
专家分:0
注 册:2006-5-1
收藏
得分:0 
1。支持鼓励 han2y 踊跃答网友问题。
2。han2y 可试运行6楼的程序。如果
灵光,就可转化为自己的知识。
3。快速排序的“快速”要在万把个
元素以上才变得明显起来。

落霞与孤鹜齐飞,秋水共长天一色! 心有多大,路有多宽。三教九流,鸡鸣狗盗。兼收并蓄,海纳百川。
2006-06-25 10:51
guliana
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2006-6-24
收藏
得分:0 

谢谢大家了~~~~~

2006-06-25 13:11
limaoyuan0921
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2006-6-25
收藏
得分:0 
怎么叫快速排序啊?

除了for for 排还有更好的方法吗?

能把原理说明白吗?谢谢~
2006-06-25 17:31
cd_tiger
Rank: 1
等 级:新手上路
帖 子:29
专家分:0
注 册:2006-6-10
收藏
得分:0 

正解:
void quick_sort(int array[], int first, int last){
int temp, low, high, list_separator;
low = first;
high = last;
list_separator = array[(first + last) / 2];

do { // seperated in two half by the seperator
while (array[low] < list_separator)
low++;

while (array[high] > list_separator)
high--;

if (low <= high){
temp = array[low];
array[low++] = array[high];
array[high--] = temp;
}
} while (low <= high);

if (first < high) //实现低位区的派序
quick_sort(array, first, high);
if (low < last) //实现高位区的排序
quick_sort(array, low, last);
}

void main(void){
int values[100], i;

for (i = 0; i < 100; i++)
values[i] = rand() % 100; //产生随机的小于100的整数

quick_sort(values, 0, 99);

for (i = 0; i < 100; i++)
printf("%d ", values[i]);
}

[此贴子已经被作者于2006-6-26 16:59:39编辑过]

2006-06-26 16:58
快速回复:关于快速排序
数据加载中...
 
   



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

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