代码
#include<stdio.h>
#include<stdlib.h>
#define Max 10
//创建一个顺序表,将其中的数据排序,将小于0的数据放在大于零数据的前面
typedef struct node{
int data[Max];
int lenght;
}Node;
void swap(int *a, int *b)
{
int *t=a;
a=b;
b=t;
}
void InitNode(Node &L) //初始化
{
L.lenght =0;
printf("请输入元素:");
int i;
for(i=0; i < Max; i++){
scanf("%d", &L.data [i]);
L.lenght ++;
}
}
int DisNode(Node &L) //打印
{
if(L.lenght <= 0) return 0;
while(L.lenght --){
printf("%d ",L.data [Max-L.lenght-1 ]);
}
return 0;
}
int quicksort(Node &L,int begin,int end) //快速排序
{ if(begin > end) return 0; //作为循环结束条件
int left=begin;
int right=end;
int temp=L.data [begin];
while(left != right){ //如果左右不相等,循环
while(L.data[right] >= temp&& left < right) //先从右边开始查找
{
right--; //指针前移
}
while(L.data[left] <= temp&& left < right) //再从左边开始查找
{
left++; //指针后移
}
if(right > left) //此时的两个下标值均为不满足条件的,交换
{
int t=L.data [left];
L.data [left]=L.data [right];
L.data [right]=t;
}
}
L.data [begin]=L.data [left]; //将对比点和小于对比点交换
L.data [left]=temp;
quicksort(L,begin, left-1); //递归左右部分
quicksort(L, left+1,end);
}
int main()
{
Node L;
InitNode(L);
quicksort(L,0,10);
DisNode(L);
return 0;
}