C语言 快速排序
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言 快速排序相关的知识,希望对你有一定的参考价值。
#include <stdio.h>
long i,n,a[10000];
main()
void qsort(long,long);
scanf("%ld*",&n);
for (i=0;i<n;i++)
scanf("%ld*",&a[i]);
qsort(0,n-1);
for (i=0;i<n;i++)
printf("%ld ",a[i]);
getch();
void qsort(long s1,long s2)
long x,i,j,s;
x=a[(s1+s2)/2];
i=s1,j=s2;
if (i>j) return;
while (j>i)
while (a[i]<x) i+=1;
while (a[j]>x) j-=1;
if (i<j)
s=a[i];
a[i]=a[j];
a[j]=s;
j--,i++;
i+=1,j-=1;
for (s=0;s<n;s++) printf("%d ",a[s]);
printf("\n");
printf("%d %d\n",i,j);
if (s1<j) qsort(s1,i);
if (s2>i) qsort(i,s2);
这段代码有错误,不过我想问几个问题
1.上面有一个全局i和sqort的i,是不是把sqort里面那个i的定义去掉就可以了
2. if (s1<j) qsort(s1,i);
if (s2>i) qsort(i,s2);
这两句是怎么回事,我是按1 3 2 4 5这几个数想的,谁能举个能用到上面两句话的例子
3. i+=1,j-=1;这句是为什么
还有那个j--,i++;是为什么
(这个是别人写的)
if (s1<j) qsort(s1,i);
if (s2>i) qsort(i,s2);
就是在分成的左右两段中再排序。 参考技术B 这个程序很糟糕,void qsort(long,long); 不知道是声明还是调用,声明就应该写再main前面(void qsort(long s1,long s2); ),调用就应该写成调用的形式(qsort(s1,s2); )而且你的调用没有传值过去,
还有a[i]中i不可能是long型,
if (s1<j) qsort(s1,i);
if (s2>i) qsort(i,s2);
其实就是排第一遍之后再进行第二遍排序,直到排序完成。本回答被提问者采纳 参考技术C 1.上面有一个全局i和sqort的i,是不是把sqort里面那个i的定义去掉就可以了
不用去掉,全局变量和函数内的互不相干,作用域不同.
2. if (s1<j) qsort(s1,i);
if (s2>i) qsort(i,s2);
这两句是怎么回事,我是按1 3 2 4 5这几个数想的,谁能举个能用到上面两句话的例子
楼上答了.
3. i+=1,j-=1;这句是为什么
i+=1 相当于 i=i+1;
j=j-1;
4.j--,i++;是为什么
j=j-1;
i=i+1;
大话数据结构C语言70 快速排序
目录
背景
快速排序
复杂度
#include <stdio.h>
void swap(int k[], int low, int high)
{
int temp;
temp = k[low];
k[low] = k[high];
k[high] = temp;
}
int Partition(int k[], int low, int high)
{
int point;
point = k[low];
while( low < high )
{
while( low < high && k[high] >= point )
{
high--;
}
swap(k, low, high);
while( low < high && k[low] <= point )
{
low++;
}
swap(k, low, high);
}
return low;
}
void QSort(int k[], int low, int high)
{
int point;
if( low < high )
{
point = Partition(k, low, high);
QSort(k, low, point-1);
QSort(k, point+1, high);
}
}
void QuickSort(int k[], int n)
{
QSort(k, 0, n-1);
}
int main()
{
int i, a[10] = {4, 2, 5, 0, 3, 9, 1, 7, 6, 8};
QuickSort(a, 10);
printf("排序后的结果是:");
for( i=0; i < 10; i++ )
{
printf("%d", a[i]);
}
printf("\\n\\n");
return 0;
}
快速排序的优化
以上是关于C语言 快速排序的主要内容,如果未能解决你的问题,请参考以下文章