好几天没写博客了,一点一点补吧
今天看了贺老师的博客,记下写的程序
问题:分离元素:以第一个元素为基准值,比它大的放在右边,小的放在左边
函数功能代码:
void move(sqlist *ps)
{
int prvote=ps->data[0];//基准值
int i=0;
int j=ps->length-1;
int tmp=0;
while(i<j)
{
//从右找到第一个比基准值小的数
while(i<j && ps->data[j]>prvote)
{
j--;
}
//从左找到第一个比基准值大的数
while(i<j && ps->data[i]<=prvote)
{
i++;
}
//跳出循环,交换两个元素值
if(i<j)
{
tmp=ps->data[i];
ps->data[i]=ps->data[j];
ps->data[j]=tmp;
}
}
tmp=ps->data[0];
ps->data[0]=ps->data[j];
ps->data[j]=tmp;
}
测试函数代码
int main()
{
sqlist sq={};
int arr[]={5,8,6,4,3,7,9,5,10,6};
creat_list(&sq,arr,10);
printf("移动前:");
travel_list(&sq);
move(&sq);
printf("移动后:");
travel_list(&sq);
return 0;
}
算法不复杂,容易出错的地方在两个while循环和交换数值。