请C语言大牛修改一下我的程序(排序改成快排)

作者&投稿:亓变 (若有异议请与网页底部的电邮联系)
C语言快速排序出错,以下源代码(改自算法导论第七章)~

错误不少:for (j=0; 改成 for (j=p;
i++ 改成 i--?
还有些地方不太明白你想干什么,是要排升序还是降序?最好说明一下你的思路

你的n是未初始化的,而且你在后面的方法中也使用了n说明n是一个全局变量,所以直接放在main中有点不合适。若是对于需要使用长度的数组,一般上使用//#define N 10 来定义长度,就算以后数组长度变了,也方便修改,只要修改N就行了,你宏定义N,将你的n 修改成 N,程序就没有问题了。我建议你可以给你的全局变量t赋值为1

#include <stdio.h>

int Partition(int r[],int i,int j) //快速排序的一次划分
{
int temp=r[i];
while(i<j)
{
while (i<j && r[j]>=temp) j--;
if(i<j)
{
r[i++]=r[j];
}
while (i<j && r[i]<=temp) i++;
if(i<j)
{ r[j--]=r[i];
}
}
r[i]=temp;
return i;
}
void QuickSort(int r[],int i,int j) //快速排序
{
if(i<j)
{
int pivot=Partition(r,i,j);
QuickSort(r,i,pivot-1);
QuickSort(r,pivot+1,j);
}
}

main()
{
int i,q;
int a[1000];
printf("Enter the num of array:\n");
scanf("%d",&q);
printf("Enter the member of array:\n");
for(i=0;i<q;i++)
scanf("%d",&a[i]);
QuickSort(a,0,q-1);
printf("QuickSort:\n");
for(i=0;i<q;i++)
{
printf("%d ",a[i]);
}
printf("\n");
}

已测试 比如
Enter the num of array:
10
Enter the member of array:
6 3 8 2 5 9 5 2 5 10
输出
QuickSort:
2 2 3 5 5 5 6 8 9 10


急!!求C语言大牛解答两道题~~~!!!
\/ 从键盘任意输入一个整数m,若m不是素数,则对m进行质因数分解,并将m表示为质因数从小到大顺序排列的乘积形式输出,否则输出 "It is a prime number\\n"。例如,用户输入90时,程序输出90 = 2 * 3 * 3 * 5;用户输入91时,程序输出"It is a prime number\\n"。素数(Prime Number),又...

请教C语言大牛一个关于宏的问题啊~~
单从FD(m,fd)->type=XXXXXXX;这句而言就是直接修改fd所指向的mio_priv_fd_st类型对象的type成员而已。type这个成员代表着当前FD(m,fd)的类型(或者状态)。你贴的程序很零散,暂时只能看出这么多。不知道你这个fd是闪存呢还是软驱呢?

请大牛帮我一下C语言作业题
include<stdio.h> int main( void ){ double f;\/\/\/总运费 double s;\/\/\/路程 double p;\/\/\/基本运费 double w;\/\/\/货物重 double d;\/\/\/折扣 scanf("%lf %lf %lf", &p, &w, &s);if ( s < 250) d = 0;else if ( 250 <= s && s < 1000 ) d = 0.02;else if ( ...

【十万火急】求 程序大牛 用C语言写一个触摸按键的程序,原理图附上...
char key_data; bit key_ok;unsigned char code Tab_key[]= \/\/行列式键盘映射,这个表主要是为了直观 {0x00, \/\/无键按下 '7','8','9','\/', '4','5','6','*', '1','2','3','-', 'C','0','='

c语言输入不定长数组,第一个数总是消失,程序如下,请大牛回答,怎么改
输入的时候 在前面加一个空格 因为被你的getchar()把1拿走了 或者代码改为 do { scanf("%d",&a[i]);i++;}while((getchar())!='\\n');

C语言 求大牛们帮忙写一个小程序
\/ Filename: test.c Description:Version: 1.0 Created: 2014年10月22日 09时31分13秒 Revision: none Compiler: gcc Author: YOUR NAME (),Company:\/ include <stdio.h> include <string.h> include <stdlib.h> int getRes( const char *str,int strlen, \/\/strlen没用...

求大牛解决c语言指针的强制转化问题!!!加上(short *)有什么用?_百度知 ...
指针的强制转换 并不影响最终的结果 更多的是给编译器用的。在C里面对指针不同类型相互赋值做的要求级别并不高 当源类型和目标类型不匹配时只是报一个warning, 而C++里面就是错误了。比如你这个 正确做法应该是 p=(char *)&a;至于为什么要加强制转换, 其最根本的原因是 不同类型的指针,进行相互...

C语言问题,小白求大牛指教
int main(){ int c;for(c=10;c<=6;c--){ if(c%6==0)break;printf("%d",c);} while(c<=10){ c++;printf("%d",c);} }

我想通过c语言修改注册表的值,但是会被360阻止,想请问一下各位大牛...
1、关闭或者卸载360;2、设置360,允许你的程序操作注册表 从程序设计角度来说,是不可能实现的。

C语言选择排序题,请大牛帮忙
include<stdio.h> int main(){int i,j,n,k,t,a[100];for(n=0;scanf("%d",&a[n])>0;n++);for(i=n-1;i>0;i--){k=i;for(j=i-1;j>=0;j--)if(a[j]>a[k])k=j;{t=a[i];a[i]=a[k];a[k]=t;} for(j=0;j<n-1;j++)printf("%d,",a[j]);printf("...

淳化县17520205599: C语言中请高手帮忙修改下下面程序,结果能使单词排序时,不区分大小写.(排序已经完成). -
任聂津博: 写一个函数,返回一个字母的大写字母的ASCII码,如果本身是大写字母,则返回自身的ASCII码,然后在判断函数外面增加这个函数就可以了. 不过估计strcmp是不能用的.还有一种方法,就是把你的字符串放到临时串里面转大写,然后再排序.这么多解决办法,为什么自己没想到还来问呢? ================= stricmp是非标准函数~~

淳化县17520205599: C语言如何输入十个数,按从小到大顺序排列!为什么我的程序不对请你们看看. -
任聂津博: #include <stdio.h> int main() { int a[10]; int i,j; int t; printf("请输入10个整数:"); for(i=0;i<10;i++) { scanf("%d",&a[i]); } for(i=0;i<10;i++) { for(j=i+1;j<10;j++) // if(a[i]>a[j]) { t=a[i]; a[i]=a[j]; a[j]=t; } } printf("排列后顺序为:"); for(i=0;i<10;i++...

淳化县17520205599: 求教C语言!用快速排序排一个结构数组,帮忙看一下我的程序吧!运行出问题啊... -
任聂津博: 你好,出现该问题的原因在于内存分配上,Person people[MaxN]; 上面这句代码感觉上是分配了100000个people_list对象的空间,实则不...

淳化县17520205599: C语言选择排序题请大牛回答 -
任聂津博: #include#include void change(int p[],int n); int main() { int *p,n; int i,j; printf("输入数值元素的个数"); scanf("%d",&n); p=(int *)malloc(n*sizeof(int)); for(i=0;i scanf("%d",&p[i]); printf("输入的元素是:\n"); for(j=0;j printf("%5d",p[j]); ...

淳化县17520205599: c语言怎么用自定义函数排序 -
任聂津博: #include <stdio.h>#include <string.h>#define NUM 3 struct student { char name[20]; /*姓名*/ long num; /*12位学号*/ double sum; /*总分*/ }; void Create_Students(struct student stu[NUM]) { struct student *p; printf("请输入学生姓名 学号(...

淳化县17520205599: 一个关于折半插入排序的程序(C语言)出现问题了!?请帮忙改一下可以吗?请高手赐教··· -
任聂津博: 我仔细看了下 你的写法错的地方不是一点点 你的思想是要用折半方法在前面的序列里找到一个值小于新的数将这个数插入在找到值之后 所以才有 for(j=i-1;j>=high+1;j--) a[j+1]=a[j]; a[high+1]=a[i]; 但是你必须有一个位置做为标量 将新的数放在这...

淳化县17520205599: C语言程序设计~!帮忙编个程序~排序问题~! -
任聂津博: void sort(int a[],int n) { int x,i,j,k;int flag=0; printf("请输入方法(1:straisort, 2:smp_selesort):"); scanf("%d",&flag); switch(flag){ case 1: for(i=1;i { x=a[i];j=i-1;while(j>=0&&x { a[j+1]=a[j];j--; }a[j+1]=x; }return; case 2: for(i=0;i { k=i;for(j=i+1;...

淳化县17520205599: C语言字符串排序
任聂津博: //代码修改如下:此处的关键是要知道不同维数的数组名代表不同逻辑指针(这里的str指针为二级指针), //不同逻辑级别移动时具有不同的偏移量. #include <stdio.h> #include <string.h> void Sort(char* str) //str是一个一级指针,接收数组的第一...

淳化县17520205599: c语言调用函数为字符串排序 -
任聂津博: 这么改:#define SIZE 5 #include<stdio.h> #include<string.h> string(char **str) {int i,j; char *s; for (i=0;i<SIZE-1;i++) for (j=i+1;j<SIZE;j++) if (strcmp(str[i],str[j])>0) { s=str[i];str[i]=str[j];str[j]=s;} //return(str[SIZE]); } void main() { char *str[SIZE]={"Father",...

淳化县17520205599: 用C语言编辑对N个数排序的程序?(四种) -
任聂津博: 看一下下面这个程序,五种排序算法的函数,如果使用,直接写一个主函数调用他们就行了 http://bellgrade.blog.163.com/blog/static/83155959200851703822942/edit/

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网