c语言快排函数,快排实现 c

用c语言编写函数QuickSort()来实现快速排序

#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

C语言 快排函数

函数kuaipai1 进入了无限死循环。

递归函数没有一个节点判定递归结束,导致进入死循环

系统堆栈用完,程序崩溃。

程序调试报告有无限死循环危险,运行后就直接崩溃,导致栈溢出。

C语言,快速排序算法

你好!

首先 0 ,n-1 。应该是 数组的坐标(因为n个数字。所以数组的坐标是0 到n-1)

而a是你传入的数组。所以他会根据数组的坐标到数组中找到元素。比较并进行排序。

递归这段理解如下:

首先要了解快速排序的思想:

1)随意找一个基准数 。将比基准小的都放到它左边。比它大的都放到它右边。所以当返回基准的坐标的时候。其实这个坐标左边都是小于它的,右边都是大于等于它的。(这里主要是看代码的实现。图中代码是大于等于在右边。也可以自己写小于等于在左边。这个不影响最后结果)

2)那么第二次对于返回基准坐标的左右两边。我们同样利用返回的基准坐标找到两个“基准”(如下图)。就会使得返回的这两个基准左右两边有序

第三次  用返回的两个基准找到四个基准(如图)

然后不断递归..不断的在整体有序的情况下使局部变的有序。

假设 为  532348789

第一次以a【0】 5为基准 。

则:

图中红色标识为基准元素 最后会使得数组全局有序。

希望能对你有所帮助。

c语言快速排序问题

这个一看就连我这没学过这些语言的人都知道过程啊。。

1、第一二步就不说了,第三行输入比如说1,8,然后就用循环将1,8之间的数用另外的数组b保存起来

2、在将b数组进行快排

3、将1,8之间的b用循环复制给1,8数组a中。然后再循环输出a就行了。。

C语言,结构体快排

自定义一个比较函数,直接调用快排库函数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;

}


本文标题:c语言快排函数,快排实现 c
URL链接:http://hbruida.cn/article/dscshcd.html