范文无忧网范文学习范文大全

c语言快排方法。要详细解析悬赏随意可追加

09月15日 编辑 fanwen51.com

[C语言中数组的排序方法中]选择排序的原理是,每次从待排序数字中挑选出最大(最小)数字,放在有序序列的末尾。实际操作中,只需要在这个数组中将挑出来的数字与前面的数字交换即可。 例如: 4 1 5 2 3 找到最小...+阅读

c语言快排方法。要详细解析悬赏随意可追加

#include #include #define swap(x,y) (x = (y + x) - (y = x)) #define dim(x) sizeof(x) / sizeof(x[0]) //快速排序 //一趟快速排序的算法 //设置两个变量i 、j 以第一个数组元素作为关键数据,赋值给key 即key = A[0]; //注意key值在整个过程中是永远不变的。始终和key进行比较 //开始j由后向前搜索 找到第一个小于key的值A[J],并与A[i]交换 //从i开始由前向后搜索,找到第一个大于key的值A[i],并与A[j]交换 //思路 先一个函数进行一趟快速排序 得到J的值 然后分左右进行函数递归调用 int sk(int a[],int iMin,int iMax) { int key = a[iMin]; int i = iMin; int j = iMax - 1; while (i < j) { while ((a[j] > key) && (i < j)) { j--; } if (i < j) swap(a[j],a[i]); while ((a[i] < key) && (i < j)) { i++; } if (i < j) swap(a[j],a[i]); } return j; } void qk(int a[], int iMin, int iMax) { if (iMin >= iMax) return ; if (iMin + 1 == iMax) { if (a[iMin] > a[iMax]) { swap(a[iMin],a[iMax]); } return; } int j = sk(a,iMin,iMax); qk(a,iMin,j - 1); qk(a,j + 1,iMax); } void main() { int a[10] = {67,12,34,23,6,45,26,77,55,53}; qk(a,0,dim(a)); for (int i = 0; i < dim(a); i++) { printf("%d ", a[i]); } printf("\r\n"); }写的时候没对每句都注释。

只是写个总注释。你看不懂在问我

C快速排序法的代码!

///

/// 快速排序法 /// /// /// /// public static void Sort(ref int[] data, int start, int end) { if (start >= end) return; if (start + 1 == end) { if (data[start] > data[end]) Swap(ref data, start, end); return; } int indexL = start + 1, indexR = end; while (indexL < indexR) { // Get from left while (indexL <= end && data[start] >= data[indexL]) indexL++; // Get from right while (indexR > start && data[start] < data[indexR]) indexR--; if (indexL < indexR) { Swap(ref data, indexR, indexL); } } if (indexL - 1 != start) Swap(ref data, start, indexL - 1); Sort(ref data, start, indexL - 2); Sort(ref data, indexL, end); }

C语言下的使用归并改进的快速排序源代码程序谢谢拉急需啊

在内部排序中,通常采用的是2-路归并排序。即:将两个位置相邻的记录有序子序列归并为一个记录的有序序列。

Merge()实现了一次归并 :

void Merge(RecType R[],int low,int mid,int high)

{ RecType *R1;

int i=low,j=mid+1,k=0;

/*k是R1的下标,i、j分别为第1、2段的下标*/

R1=(RecType *)malloc((high-low+1)*sizeof(RecType));

while (i<=mid & j<=high)

if (R[i].key<=R[j].key) /*将第1段中的记录放入R1中*/

{ R1[k]=R[i]; i++;k++; }

else /*将第2段中的记录放入R1中*/

{ R1[k]=R[j]; j++;k++; }

while (i<=mid) /*将第1段余下部分复制到R1*/

{ R1[k]=R[i]; i++;k++; }

while (j<=high) /*将第2段余下部分复制到R1*/

{ R1[k]=R[j]; j++;k++; }

for (k=0,i=low;i<=high;k++,i++) /*将R1复制回R中*/

R[i]=R1[k];

}

MergePass()实现了一趟归并

void MergePass(RecType R[],int length,int n)

{ int i;

for (i=0;i+2*length-1

Merge(R,i,i+length-1,i+2*length-1);

if (i+length-1

Merge(R,i,i+length-1,n-1); /*归并这两个子表*/

}

二路归并排序算法如下:

void MergeSort(RecType R[],int n)

/*自底向上的二路归并算法*/

{

int length;

for (length=1;length

MergePass(R,length,n);

}

c语言快速排序qsort函数

你这个是c程序还是c++

c++的话类型要比较严格

比较函数接受的参数类型应该是const void*

c的话你main里函数原型的声明也不对啊,这样改一下

#include

#include

#include

int num[]={125,-26,53,12,-6,95,46,85,-45,785};/*定义全局数组*/

void main()

{

int i,comp1(const void *i,const void *j),comp2(const void *i,const void *j);

system("cls");/*清屏*/

printf("the original array is:\n");

for(i=0;i<10;i++)/*将数组按原序输出*/

printf("%10d",num[i]);

qsort(num,10,sizeof(int),comp1);

printf("\n The accending sorted array is:\n");

for(i=0;i<10;i++)/*将数组按升序输出*/

printf("%10d",num[i]);

qsort(num,10,sizeof(int),comp2);

printf("\n The decending sorted array is:\n");

for(i=0;i<10;i++)/*将数组按降序输出*/

printf("%10d",num[i]);

getchar();

}

comp1(const void *i,const void *j)

{

return *(const int*)i-*(const int*)j;

}

comp2(const void *i,const void *j)

{

return *(const int*)j-*(const int*)i;

}

延伸阅读:

C语言数组排序方法像是选择法排序,但不太简练! 正确的选择法为: #include <stdio.h> void main(void) { int a[9]={3,42,55,546,43,323,54,121,32},i,j,l,temp; for(i=0;i<9;i++) for(j=i+1;j<8;...

求C语言编写的表白程序要代码呃,你还不如用vbs,网上也有一堆教程和例子,很简单,随便看一下就知道怎么写了。1234567891011121314 DimmyName,herName,myNameAns,herNameAnsmyName="池早早"herName="欧浩辰"MsgBox...

关于C盘的问题要详细答案你试试硬盘分区魔术师8.0硬盘分区魔术师使用说明有过一定的计算机经验的朋友都应该知道Power Quest公司的Partition Magic磁盘分区大师。1998年Power Quest推出了它的升级版...

没学过C语言可以学C语言数据结构与算法吗你好 一点小建议希望能对你有帮助 (1)学算法 学习算法和具体的语言还是有一定的联系,比如说你的算法最后要用c语言来实现,因为c是面向过程的,所以这和用面向对象的语言如c++来实...

C语言数据结构与算法分析C语言描述Position不是一个类型,起码C语言中,我写那么多年代码没见过这个类型 。你该把整段代码贴上来。我猜你看的那段代码是伪代码,Position是自定义类型。若Position是类名,那么Positi...

泡黄豆观察日记追加120悬赏分泡黄豆观察日记追加120悬赏分,泡豆芽的观察日记100多字:种黄豆芽首先 1)要选好优质的黄豆 :黄豆不能用机器打过的,因为经过水泡后的黄豆易成两瓣不易成长导致腐烂。 2)选好的2~3斤...

求C语言程序设计实例要100行以上求C语言程序设计实例要100行以上,C语言编程100例变形题:Problem Description: The highest building in our city has only one elevator. A request list is made up with N...

初中关于厚德载物的主题班会急可追加悬赏50初中关于厚德载物的主题班会急可追加悬赏50,文明礼仪班会课设计方案:主持人稿 大意: 人有聪明和愚笨,就如同地形有高低不平,土壤有肥沃贫瘠之分。农夫不会为了土壤贫瘠而不耕作,君...

C语言问题利用指针方法如何引导学生分析文本的篇章结构:基本解释 1、指针的本质是一个与地址相关的复合类型,它的值是数据存放的位置(地址);数组的本质则是一系列的变量。 2、数组名对应着(而不是指向)一...

推荐阅读
图文推荐
栏目列表