C语言快速排序问题程序第11行的j=j--;为什么改成j--就报错

作者&投稿:宁童 (若有异议请与网页底部的电邮联系)
求C语言快速排序程序~

#include

int partions(int l[],int low,int high)
{
int prvotkey=l[low];
l[0]=l[low];
while (low<high)
{
while (low=prvotkey)
--high;
l[low]=l[high];
while (low<high&&l[low]<=prvotkey)
++low;
l[high]=l[low];
}

l[low]=l[0];
return low;
}

void qsort(int l[],int low,int high)
{
int prvotloc;
if(low<high)
{
prvotloc=partions(l,low,high); //将第一次排序的结果作为枢轴
qsort(l,low,prvotloc-1); //递归调用排序 由low 到prvotloc-1
qsort(l,prvotloc+1,high); //递归调用排序 由 prvotloc+1到 high

}
}

void quicksort(int l[],int n)
{
qsort(l,1,n); //第一个作为枢轴 ,从第一个排到第n个
}

void main()
{
int a[11]={0,2,32,43,23,45,36,57,14,27,39};

for (int b=1;b<11;b++)
printf("%3d",a[b]);

printf("
");
quicksort(a,11);

for(int c=1;c<11;c++)
printf("%3d",a[c]);

}

你的程序有很多问题,函数类型都有错,其它问题就没看了;
还有给你个建议,函数命名做到见名知义(最好不要用蹩脚的拼音)。这是我调试好的程序
#include"stdlib.h"
#include"stdio.h"
#include"time.h"
void main()
{
void QuickSort(int a[],int start,int end);
void generate(int a[],int n);
void print(int a[],int n);
int a[10];
generate(a,10);
print(a,10);
QuickSort(a,0,9);
print(a,10);
system("pause");
}

void generate(int a[],int n)
{
int i;
srand((unsigned long)time(0));
for(i=0;i<n;i++)
{
a[i]=rand()*100/RAND_MAX;
}
}

void print(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
printf("
");
}
void QuickSort(int a[],int start,int end)
{
int i,j,temp;
i=start;
j=end;
temp=a[start];
while(i<j)
{
while(i<j && a[0]<a[j])
j--; //从右边找到比基准值小的位置
if(i<j)
{
a[i]=a[j];
i++; //大元素左移
}
while(i=a[i])
i++; //从左边找到比基准值小的位置
if(i<j)
{
a[j]=a[i]; //小元素右移
j--;
}
}
a[i]=temp; //最后i和j相等
if(start<i)
QuickSort(a,start,i-1);
if(i<end)
QuickSort(a,i+1,end);
}

经过测试j=j--相当于j没有作任何运算。你可以单独写一个程序验证一下。如
int j=1;
j=j--;
printf("%d\n",j);
你会发现输出值为1
至于为什么,我还不清楚。
另外,经过我的调试,你把j=j--和对应的i++去掉,这个程序也能输出正确结果。由于测试数据有限,不能保证你的程序是正确的。至于下面这两句
kuaipai(p,i-1);
kuaipai(i+1,q);
我觉得第一句应该改为kuaipai(p,j-1);
但是我的测试数据显示这两种都正确,可能是测试数据有限,碰巧正确的缘故吧。反正如果你的程序哪次的结果出错了,可以试着这样改一下。

如果你使用的是TC系统,这个程序里的错误在主函数,
定义语句应该移到操作语句之前,即int 变量定义语句 应该移动到fp文件打开语句之前。
11语句中,将j=j--;改为j--;是没有错误的。
j=j--;才是个含义不清楚的问题语句。

显然是因为没了;号。j=j--本身就包含了j--这个操作,它和{j=j;j--;}是一样的。

不懂你意思啊,你这不是语法问题么,少了个分号肯定报错啊

把抱错信息帖出来


跪求C语言建立双向链表递归快速排序的完整程序
include <stdio.h> typedef struct Link\/*双向链表结构体*\/ { int data;struct Link *lift;struct Link *right;}linkx,*linky;linky Init();\/*建立双向链表*\/ void PrLink(linky p);\/*输出双向链表*\/ linky Sort(linky head);\/*对双向链表排序*\/ linky Swap(linky head,linky one,linky ...

C语言快速排序问题程序第11行的j=j--;为什么改成j--就报错
经过测试j=j--相当于j没有作任何运算。你可以单独写一个程序验证一下。如 int j=1;j=j--;printf("%d\\n",j);你会发现输出值为1 至于为什么,我还不清楚。另外,经过我的调试,你把j=j--和对应的i++去掉,这个程序也能输出正确结果。由于测试数据有限,不能保证你的程序是正确的。至于下面...

请用java语言编写排序程序。
参考代码如下,可以按需求自己修改 import java.util.Date;public class SortThread {public static void main(String[] args) {\/\/产生一个随机数组int[] ary = getArray();\/\/启动冒泡排序线程new Thread(new MaoPao(ary)).start();\/\/启动快速排序线程new Thread(new KuaiSu(ary)).start();}...

C语言快速排序问题
include <stdio.h> include <stdlib.h> void XE_Sort(int *s,int low,int high);int Sort(int *t,int low,int high);int main(void){ int m,i,*data;printf("输入排序个数:");scanf("%d",&m);data=(int *)malloc((m+1)*sizeof(int));printf("输入排序元素:");for(i=1;...

求C或C++语言编写的快速排序法的小程序,详细要求看补充~
include "iostream.h"void QuichSort( int a[], int low, int high){ int i,j;int nTemp;i = low;j = high;nTemp = a[low];while( i<j){ while((i<j) && nTemp<a[j]) i++;if( i<j){ a[j] = a[i];j--;} } a[i] = nTemp;if(lowhigh) QuichSort( a, j+...

C语言排序(冒泡,快速排序和简单选择法排序)问题
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。include <stdio.h>#include <stdlib.h>#include define MAX 10#define TRAN(x,y) { int t; t=x; x=y; y=t; } void quicksor...

c语言生成50个随机数,对随机数进行快速排序。
楼下的几个回答我怎么看也不是快速排序,所以我做了一个用快速排序法排序的程序 include<stdio.h> include<stdlib.h> include define LEN 50 \/\/快速排序(升)void quicksup(int *arr,int low,int high){ int temp,l,r;if(low<high){ l=low;r=high;temp=arr[low];while(low<high){ whil...

C语言,快速排序算法
你好!首先 0 ,n-1 。应该是 数组的坐标(因为n个数字。所以数组的坐标是0 到n-1)而a是你传入的数组。所以他会根据数组的坐标到数组中找到元素。比较并进行排序。递归这段理解如下:首先要了解快速排序的思想:1)随意找一个基准数 。将比基准小的都放到它左边。比它大的都放到它右边。所以当...

C语言中 关于快速排序法的题目:关键码序列:(66,13,51,76,81,26,57,6...
把小于基准值的放前面去 while(low<high&&r[low]<=pivo)\/\/从前面找小于基准值的数 { low++;} r[high] = r[low];\/\/不满足时就到这里把大于基准值的数放后面去 } r[low] = pivo;\/\/最后的位置就是放基准值的位置 } \/\/排序第一次完后应该是23,13,51,57,26,66,81,69,76 ...

用C语言快速排序法编程按从大到小输出下面十个数(24,2,8,32,87,45...
QuickSort(low,Low-1,array); \/*对基准点左边的数再执行快速排序*\/ QuickSort(Low+1,high,array); \/*对基准点右边的数再执行快速排序*\/ } } void main() { int array[]={24,2,8,32,87,45,16,2,12,40};int i=9;QuickSort(0,9,array);for(;i>=0;i--)printf("%d "...

留坝县13715645637: 用C语言编快速排序
之治艾迪: #include<stdio.h> #include<stdlib.h> long a[10000000]; long i,j,k,n; void ks(int i, int j) { int t,l=i,h=j,m;m=a[(i+j)/2];while (i<=j){while (a[i]<m) i=i+1;while (a[j]>m) j=j-1;if (i<=j){ t=a[i]; a[i]=a[j]; a[j]=t; i=i+1; j=j-1;}}if(i<h) ks(i,h);if(l<j) ks(l,j); }main() ...

留坝县13715645637: 用C语言编写一个快速排序算法 输入10个数 -
之治艾迪: 代码如下: #include <stdio.h> #define N 10 void quickSort(int *arr,int l,int r) {//此处编写代码实现快速排序 int i,j,x,temp; if(l<r) { i=l; j=r; x=arr[(l+r)/2]; //以中间元素为轴 while(1) { while(i<=r&&arr[i]<x)i++; while(j>=0&&arr[j]>x)j--; if(i>=j) //相遇则跳出 ...

留坝县13715645637: 采用C语言编一个快速排序的程序
之治艾迪: 第一个输入是数据总数 下面是每个数据分别输入 #include <stdio.h> #include <stdlib.h> #define MAX 50000 int AA[MAX],n; void getdata(){ int i; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&AA[i]); } void putdata(){ int i; for(i=0;i<n;i++) printf("...

留坝县13715645637: 关于C语言 数字快速排序 -
之治艾迪: 刚好以前写过一个 给你参考下 #include <stdio.h> #define N 10 //排序数字个数 void QuickSort(int *a,int i,int j) { if(i>=j) { return;//递归终止条件 } int head=i; int end=j; int tag=a[i];//为该段第一个值找位置 while(i!=j) { if(a[i]>a[j])//大 转到右边 { int t=a[...

留坝县13715645637: 用C语言写一个快速排序法,不要用库函数 -
之治艾迪: include<stdio.h> void main() {int a[]={8,4,24,1,54,87,113,39};//这里的元素可以手动输入,用for循环输入,先给定数组长度N //再一次输入数组元素 /* int n; scanf("&%d",n); for(int =0;i<n;i++)scanf("&%d",&a[i]); */ for(int i=0;i<8;i++){for(int j...

留坝县13715645637: 用C语言编程实现快速排序算法 -
之治艾迪: 给个快速排序你参考参考 /********************** 快速排序 **************************** 基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录), 以该记录为基准,将当前的无序区划分为左右两个较小的无 序子区,使左边的记录均小于基...

留坝县13715645637: c语言编写快速排序 -
之治艾迪: int partition(int n[],int left,int right) //int类型的方法,传入参数(int类型的 数组n,int类型的参数left和right) { int lo,hi,pivot,t;//定义int类型的变量pivot=n[left];//给变量pivot赋值,值为数组n中第left个数字 lo=left-1;//给lo赋值,这是n[left]前一位数字 ...

留坝县13715645637: 用C语言编写函数,要实现快速排序算法或者冒泡法 -
之治艾迪: 冒泡法排序函数如下: void bubble(int a[],int n) {int i,j,t;for(i=0;i<n-1;i++)/*共进行n-1轮*/for(j=0;j<n-1-i;j++)/*每轮在前n-i个数中比较*/if(a[j]>a[j+1]) /*若相邻元素逆序*/ {t=a[j]; a[j]=a[j+1];a[j+1]=t;}/*就交换*/ }void sort(int *a, int left, int right) {if(...

留坝县13715645637: C语言中的排序法 -
之治艾迪: c语言中排序法有选择法和冒泡法是最常见的. 1冒泡法对10个数排序 #include<stdio.h> void main () { int a[10]; int i,j,t; printf("please input 10 numbers:\n"); for(i=0;i<10;i++)scanf("%d",&a[i]); printf("\n"); for(j=0;j<9;j++) //进行9次循环,实...

留坝县13715645637: C语言快速排序代码
之治艾迪: #include &lt;stdio.h&gt; int partions(int l[],int low,int high) { int prvotkey=l[low]; l[0]=l[low]; while (low&lt;high) { while (low&lt;high&amp;&amp;l[high]&gt;=prvotkey) --high; l[low]=l[high]; while (low&lt;high&amp;&amp;l[low]&lt;=prvotkey) ++low; l[high]=l[low]; }...

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