快速排序

来源:互联网 发布:电脑美工都学什么 编辑:程序博客网 时间:2024/04/28 08:19

用C语言实现快速排序,用递归和非递归两种方法。

递归方法:

#include<stdio.h>#include<stdlib.h>int main(){    void quicksort(int min,int max,int *a);    int i,n,*a;    printf("input number:\n");    scanf("%d",&n);    a=(int *)malloc(n*sizeof(int));    printf("input member:\n");    for(i=0;i<n;i++)        scanf("%d",&a[i]);    quicksort(0,n-1,a);    for(i=0;i<n;i++)        printf("%d ",a[i]);    return 0;}void quicksort(int min,int max,int *a){    int i,j,k;    int temp=a[min];    i=min;    j=max;    if(i>j)        return ;    while(i!=j)    {        while(a[j]>=temp&&i<j)            j--;        while(a[i]<=temp&&i<j)            i++;        if(i<j)        {            k=a[i];            a[i]=a[j];            a[j]=k;        }    }    a[min]=a[i];    a[i]=temp;    quicksort(min,i-1,a);    quicksort(i+1,max,a);}
非递归方法:

#include<stdio.h>#include<stdlib.h>struct node{    int min;    int max;};void fun(int min,int max,int a[]){    int key = a[min];    int i = min;    int j = max;    int temp;    struct node Stack[100];    int top = 0;    Stack[top].min = min;    Stack[top].max = max;    while(top>-1)    {        i = min = Stack[top].min;        j = max = Stack[top].max;        top--;        key = a[min];        while(i<j)        {            while((i<j) && (key <= a[j]))                j--;            if(i < j)            {                temp = a[i];a[i] = a[j];a[j] = temp;                i++;            }            while((i<j) && (key >= a[i]))                i++;            if(i < j)            {                temp = a[i];a[i] = a[j];a[j] = temp;                j--;            }         }        if(min < i-1)        {            top++;            Stack[top].min = min;            Stack[top].max = i-1;        }        if(max>i+1)        {            top++;            Stack[top].min = i+1;            Stack[top].max = max;        }     }}int main(){     int i;     int a[10] = {49,38,65,97,76,13,27,9,2,1};     for(i=0;i<10;i++)       printf(" %d   ",a[i]);     printf("\n");       fun(0,9,a);     for(i=0;i<10;i++)       printf(" %d   ",a[i]);     printf("\n");     return 0;}
谢谢来访大笑,有问题可以和我联系    QQ:2201774151


0 0