|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
e<stdio.h>
void qick(int a[],int left,int right)
{
int i = 0,j = 0,tem,p;
i = left;
j = right;
p = a[(i + j) / 2];
while(i < j)
{
while(a[i] < p)
i++;
while(a[j] > p)
j--;
if(i <= j)
{
tem = a[i]; //这个代码块有什莫用,可以详细解释一下吗
a[i] = a[j];
a[j] = tem;
i++;
j--;
}
}
if(left < j)
qick(a,left,j);
if(right > i)
qick(a,i,right);
}
int main(void)
{
int i,len;
int array[] = {73, 108, 111, 118, 101, 70, 105, 115, 104, 67, 46, 99, 111, 109};
len = sizeof(array) / sizeof(array[0]);
qick(array,0,len - 1);
for(i = 0;i < len;i ++)
{
printf("%d ",array[i]);
}
return 0;
}
本帖最后由 ExiaGN001 于 2022-12-6 19:40 编辑
这是快速排序算法。
while(i < j)
{
if(i <= j)
{
tem = a[ i]; //这个代码块有什莫用,可以详细解释一下吗
a[i ] = a[j];
a[j] = tem;
i++;
j--;
}
}
黑体部分是用来实现交换a[i ],a[j]的值、
整个被复制代码部分是将原数组变成两个部分,
第一部分的所有元素都<=p;
第二部分的所有元素都>=p;
再用此算法分别对两部分排序直至两部分均有序(仅剩1元素,一定有序)
|
|