[C语言高效排序算法的原理及代码]快速排序是通过分治的思想来实现的。即找一个 中间数,让小于这个数字的放在他左边,大于这个数字的放在右边!然后逐渐放小! 以升序为例: int qsort(ArrayStule *aS,int low,int hi...+阅读
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
0和N-1表示的是数组下标。快排每一趟排序的目的是使值比设定的key值小的数都排到数组前部分,大的都排到后部分;然后对这两部分用新的关键值key分别重复上一步的操作;递归,直到数组有序。
其中关键值key=a[low]。
用题目给定的数组模拟第一趟排序如下:
下标 0 1 2 3 4 5 6 7 8 9
值 9 16 47 82 4 66 12 3 25 51
low=0 high=9
part_element=a[low]=9
进入for循环
进入第一个while
part_element<51,于是high--,high=8;
part_element<25,high--,high=7;
part_element>3,不满足,结束while
a[low]=a[0]=a[high]=a[7]=3,low++,low=1;
进入第二个while
part_element<16,不满足,结束while
a[high]=a[7]=a[low]=a[1]=16,high--,high=6
for第一个循环结束,数组如下
3 16 47 82 4 66 12 16 25 51
low=1,high=6
for第二个循环同上,结束时数组如下
3 4 47 82 47 66 12 16 25 51
low=2,high=3
for第三个循环,第一个while中high--以后,low==high,直接break跳出for循环,此时
3 4 47 82 47 66 12 16 25 51
low=2,high=2
结束for以后
a[high]=a[2]=part_element=9,得到
3 4 9 82 47 66 12 16 25 51
split函数returnhigh=2
quicksort函数中middle=2;
下面两句递归,仍然是调用split函数,对数组
0-2,3-9两部分分别重复上述操作
最后直到数组数据有序
以下为关联文档:
用快速排序法C排序从小到大排最好能讲一下原理谢谢啦#include #include using namespace std; void swap(int& a,int& b) { int c; c=a; a=b; b=c; } void sort(int* a, int n)//快排函数,从小到大 { if(n<=1) return; if(n==2)...
快速排序的原理是什么先数据序列选元素,并序列所比该元素元素都放右边或左边,再左右两边别用同处直每待处理序列度1,处理结束前序区R[1..H]任取数据元素作比较"基准"(妨记X)用基准前序区划左右两较序区:R...
用C语言编程实现快速排序算法给个快速排序你参考参考 /********************** 快速排序 **************************** 基本思想:在待排序的n个记录中任取一个记录(通常取第一个记录), 以该记录为基准,将当...
快速排序算法原理与实现快速排序的基本原理就是每一次把一个值放到它应该的位置上,然后序列被分为两部分,这个数前一部分后一部分,再对这两部分分别进行快速排序即可。 如此递归下去,但是对于基本有序...
快速排序原理是什么先从数据序列中选一个元素,并将序列中所有比该元素小的元素都放到它的右边或左边,再对左右两边分别用同样的方法处之直到每一个待处理的序列的长度为1, 处理结束。 在当前无序...
C语言的快速排序的算法是什么啊快速排序(Quicksort)是对冒泡排序的一种改进。由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一...
用C语言编快速排序#include<stdio.h> #include<stdlib.h> long a[10000000]; long i,j,k,n; void ks(int i, int j) { int t,l=i,h=j,m; m=a[(i+j)/2]; while (i<=j) { while (a[i]<m) i=i+1;...
用C语言写一个快速排序法不要用库函数include<stdio.h> void main() { int a[]={8,4,24,1,54,87,113,39};//这里的元素可以手动输入,用for循环输入,先给定数组长度N //再一次输入数组元素 /* int n; scanf("&%d",n);...
c语言编写快速排序int partition(int n[],int left,int right) //int类型的方法,传入参数(int类型的 数组n,int类型的参数left和right) { int lo,hi,pivot,t;//定义int类型的变量 pivot=n[left];//...