c语言快速排序 谁能给我讲讲下面的代码啥意思
发布网友
发布时间:2022-04-29 20:37
我来回答
共2个回答
热心网友
时间:2022-05-22 02:50
设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,
然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
值得注意的是,快速排序不是一种稳定的排序算法,也就是说,
多个相同的值的相对位置也许会在算法结束时产生变动。
一趟快速排序的算法是:
1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,
4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。
找到符合条件的值,进行交换的时候i, j指针位置不变。
另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
热心网友
时间:2022-05-22 04:08
做一次位置排序
菜鸟提问 c语言关于快速排序
其实,最想说明的是那段交换的代码 R[j]^=R[i];R[i]^=R[j];R[j]^=R[i];一定要排除 i==j 的情况。即自己与自己交换的情况。如:a=9;a^=a;/*a=0*/ a^=a;/*a=0*/ a^=a;/*a=0*/ a就不再是10了。include<stdio.h> include<stdlib.h> void quicksort(int R[],int...
C语言快速排序代码
quicksort(a,11);for(int c=1;c<11;c++)printf("%3d",a[c]);}
C语言快速排序
/快速排序算法/ int Partition(int D[], int l, int r){ D[0]=D[l];while (l<r) { while (l<r && D[0]<D[r]) r--;D[l]=D[r];while (l<r && D[0]>=D[l]) l++;D[r]=D[l]; } D[r]=D[0];return r;} void Qsort(int D[], int l, int r){ int p...
用C语言编写函数实现快速排序(升序),在主函数中输入数组数据,并调用该...
//排序的算法是二分法,N的对数时间复杂度。。。//如果有疑问,我们可以再探讨。。。include<stdlib.h> include<string.h> include<stdio.h> bool merge(int * array,int p,int q,int r){ if(!(p<<q<r)&&p>=0&&r<=sizeof(array)/sizeof(array[0])-1){ return false;} int * le...
C语言中快速排序法的原理及应用
一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是--程序的大忌--速度太慢。附上快速排序代码:include<stdio.h>void quicksort(int a[],int left,int right){ int i,j,temp; i=left; j=right; temp=a[left]; if(left>right...
C语言实现将数组的六个元素按从小到大的顺序输出?
C语言实现将数组的六个元素按从小到大的顺序输出,可以采用内部排序算法对数组的元素进行排序,然后输出排序后的数组,就可以得到按从小到大的顺序输出。以快速排序为例的排序代码:void quickSort(int a[],int l,int r) { if(l>=r)return;int i = l;int j = r;int key = a[l];//选择...
C语言一个快速排序的问题 我应该是传参的问题 但我不知道该如何改 请大...
下面是《算法导论》里快速排序的实现,希望对你有用:include<stdio.h>void swap(int *a,int *b){ int t =*a; *a = *b; *b = t; return;}int partition(int a[],int start,int end){ int x = a[end]; int i = start -1; int j; for(j= start...
快速排序,看了解释还是不会,求通俗点的
下面排序C语言的排序快速代码,参考一下 void sort(int *a, int left, int right){ if(left >= right)/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/ { return ; } int i = left; int j = right; int key = a[left]; while(i < j) ...
用C语言快速排序法编程按从大到小输出下面十个数(24,2,8,32,87,45...
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 ",array[i]);getch();return 0;} ...
C语言的快速排序的算法是什么啊?
快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有...