用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