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)
{
//min
max记录当前处理的这个区间的左极限和有极限
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;
}
加载中,请稍候......