int partions(int l[],int low,int high)
{
int prvotkey=l[low]
l[0]=l[low]
while (low<high)
{
while (low<high&&l[high]>=prvotkey)
--high
l[low]=l[high]
while (low<high&&l[low]<=prvotkey)
++low
l[high]=l[low]
}
l[low]=l[0]
return low
}
void qsort(int l[],int low,int high)
{
int prvotloc
if(low<high)
{
prvotloc=partions(l,low,high) //将第一次排序的结果作为氏如枢轴
qsort(l,low,prvotloc-1)//递归调用排序 由low 到prvotloc-1
qsort(l,prvotloc+1,high)//递归调用排序 由 prvotloc+1到 high
}
}
void quicksort(int l[],int n)
{
qsort(l,1,n)//第一个作为枢轴 ,从第一个排到第n个
}
void main()
{
int a[11]={0,2,32,43,23,45,36,57,14,27,39}
for (int b=1b<11b++)
printf("%3d",a[b])
printf("改核孙\n")
quicksort(a,11)
for(int c=1c<11c++)
printf("%3d"核链,a[c])
}
1、“快速排序法”使用的是递归原理,下面一个例子来说明“快速排序法”的原理。首先给出一个数组{53,12,98,63,18,72,80,46, 32,21},先搜局找到第一个数--53,把它作为中间值,也就是说,要把53放在一个位置,使得它左边的值比它小,右边的值比它大。{21,12,32, 46,18,53,80,72,63,98},这样一个数组的排序就变成了两个小数组的排序--53左边的数组和53右边洞雹的数组,而这两个数组继续用同样的方式继续下去,一直到顺序完全正确。一般来说,冒泡法是程序员最先接触的排序方法,它的优点是原理简单,编程实现容易,但它的缺点就是速度太慢。
2、快速排序代码:
#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)
return
while(i!=j)
{
while(a[j]>=temp&&j>i)
j--
纳漏帆 if(j>i)
a[i++]=a[j]
while(a[i]<=temp&&j>i)
i++
if(j>i)
a[j--]=a[i]
}
a[i]=temp
quicksort(a,left,i-1)
quicksort(a,i+1,right)
}
void main()
{
int a[]={53,12,98,63,18,72,80,46,32,21}
int i
quicksort(a,0,9)
/*排好序的结果*/
for(i=0i<10i++)
printf("%4d\n",a[i])
}
首先,你要理解快速排序的算法,它是一种递归的算法。每次选择一个基准,让该基燃则链准左边的数全小与他,右边的全大于它,这样就是一次循环,将数据分皮孙成盯差两段,每次再找基准分成两段。if (s1<j) qsort(s1,i)
if (s2>i) qsort(i,s2)
就是在分成的左右两段中再排序。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)