C语言快速排序代码

C语言快速排序代码,第1张

#include <stdio.h>

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)

就是在分成的左右两段中再排序。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12569114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存