首页 行业资讯 宠物日常 宠物养护 宠物健康 宠物故事

将顺序表(a1,a2,…,an)重新排列为以a1为界的两部分:a1前面的值均比a1小,a1后面的值都比a1大。

发布网友

我来回答

1个回答

热心网友

#include<stdio.h>

//此函数将数列划分成两部分,以数列第一个元素为键值。
void devide(int *a, int n)
{
int i, p = 0, t;
for(i = p + 1; i < n; ++i)
{
// 遍历数列,每当遇到一个比键值小的数时,将其与左边第P个位置上的数字交换,由此保证最左边的P个数均小于键值。
if(a[i] < a[0] && i > ++p)
{
t = a[p];
a[p] = a[i];
a[i] = t;
}
}
// 将第一个元素与第P个元素位置交换,完成整个过程。
if(p > 0)
{
t = a[p];
a[p] = a[0];
a[0] = t;
}
}
// 输出结果
void print(int *a, int n)
{
int i;
for(i = 0; i < n; ++i)
{
printf("%d ", a[i]);
}
}
void main()
{
//初始化数列,此部分可以根据实际需要进行调整
int a[10] = { 5, 1, 2, 9, 6, 4, 3, 7, 8, 0 };

devide(a, 10);
print(a, 10);

sleep(10);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com