十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
#include stdlib.h
从策划到设计制作,每一步都追求做到细腻,制作可持续发展的企业网站。为客户提供做网站、网站制作、网站策划、网页设计、国际域名空间、虚拟空间、网络营销、VI设计、 网站改版、漏洞修补等服务。为客户提供更好的一站式互联网解决方案,以客户的口碑塑造优易品牌,携手广大客户,共同发展进步。
#include stdio.h
#define MAXN 8
#define MOD 1024
void QuickSort(int *arr, int low, int high)
{
if (low = high) return;
//保存排序区间的 起始位置和终点位置
int left = low, right = high;
//默认 左边第一个元素 为标志
int key = arr[low];
while (low high)
{
while (low high arr[high] = key) --high;
arr[low] = arr[high];
while (low high arr[low] = key) ++low;
arr[high] = arr[low];
}
arr[low] = key;
//每次排序后都分成两部分[left, low) (low, right]
//arr[low]的位置是一定是有序的
QuickSort(arr, left, low - 1);
QuickSort(arr, low + 1, right);
return;
}
int main(void)
{
int n;
scanf("%d", n);
int arr[MAXN] = {0};
int i;
for (i = 0; i n; ++i)
scanf("%d", arr[i]);
//输入是默认为生活中习惯的数组左边第一个为:编号1
int s, m;
scanf("%d %d", s, m);
//转成计算机数组第一个为:编号0
s--; m--;
//快排
QuickSort(arr, s, m);
//输出
for (i = s; i = m; ++i)
{
printf("%d ", arr[i]);
}
return 0;
}
//测试数据
//8
//1 2 3 4 5 6 7 8
//2 6
输出 6 5 4 3 2
函数kuaipai1 进入了无限死循环。
递归函数没有一个节点判定递归结束,导致进入死循环
系统堆栈用完,程序崩溃。
程序调试报告有无限死循环危险,运行后就直接崩溃,导致栈溢出。
你好!
首先 0 ,n-1 。应该是 数组的坐标(因为n个数字。所以数组的坐标是0 到n-1)
而a是你传入的数组。所以他会根据数组的坐标到数组中找到元素。比较并进行排序。
递归这段理解如下:
首先要了解快速排序的思想:
1)随意找一个基准数 。将比基准小的都放到它左边。比它大的都放到它右边。所以当返回基准的坐标的时候。其实这个坐标左边都是小于它的,右边都是大于等于它的。(这里主要是看代码的实现。图中代码是大于等于在右边。也可以自己写小于等于在左边。这个不影响最后结果)
2)那么第二次对于返回基准坐标的左右两边。我们同样利用返回的基准坐标找到两个“基准”(如下图)。就会使得返回的这两个基准左右两边有序
第三次 用返回的两个基准找到四个基准(如图)
然后不断递归..不断的在整体有序的情况下使局部变的有序。
假设 为 532348789
第一次以a【0】 5为基准 。
则:
图中红色标识为基准元素 最后会使得数组全局有序。
希望能对你有所帮助。
这个一看就连我这没学过这些语言的人都知道过程啊。。
1、第一二步就不说了,第三行输入比如说1,8,然后就用循环将1,8之间的数用另外的数组b保存起来
2、在将b数组进行快排
3、将1,8之间的b用循环复制给1,8数组a中。然后再循环输出a就行了。。
自定义一个比较函数,直接调用快排库函数qsort即可。举例如下:
//#include "stdafx.h"//If the vc++6.0, with this line.
#include "stdio.h"
#include "stdlib.h"
#include "time.h"
struct ln{
int data,score,math;
}ss[100];
int mycmp(const void *a, const void *b){//自定义比较函数
return ((struct ln*)a)-data-((struct ln*)b)-data;//若要降序,-号前后变量交换
}//data改为score或math就可按相应要素排序
int main(void){//测试一下……
int i;
srand((unsigned)time(NULL));
for(i=0;i100;ss[i++].data=rand()%1000);
qsort(ss,100,sizeof(struct ln),mycmp);
for(i=0;i100;printf("%4d",ss[i++].data));
printf("\n");
return 0;
}