C语言快速排序代码

Python011

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])

}

#include <stdio.h>

#include <malloc.h>

void change(int *a,int*b)

{

int t=*a

*a=*b

*b=t

}

void qsort(int*a,int n)

{

if(n>1){

int i=0,j=n-1,t=0

for(i<j)

{

while(a[t]<=a[j])j--

if(j<0)break

change(a+t,a+j)

t=j

while(a[t]>=a[i])i++

if(i>=n)break

change(a+t,a+i)

t=i

}

qsort(a,i-1)

qsort(a+i+1,n-i-1)

}

}

int main(void)

{

int *a

int t,n,i

scanf("%d",&t)

while(t--)

{

scanf("%d",&n)

a=(int*)malloc(n*sizeof(int))

for(i=0i<ni++)

scanf("%d",a+i)

qsort(a,n)

for(i=0i<ni++)

printf("%d ",a[i])

free(a)

}

  return 0

}

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])

}