数据结构算法——顺序表应用
2016-04-24 10:54
411 查看
好几天没写博客了,一点一点补吧
今天看了贺老师的博客,记下写的程序
问题:分离元素:以第一个元素为基准值,比它大的放在右边,小的放在左边
函数功能代码: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循环和交换数值。
今天看了贺老师的博客,记下写的程序
问题:分离元素:以第一个元素为基准值,比它大的放在右边,小的放在左边
函数功能代码: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循环和交换数值。
相关文章推荐
- 栈的应用实践——括号匹配的检验
- 234. Palindrome Linked List
- 第六章-数据结构入门
- Android JNI 使用的数据结构JNINativeMethod详解
- 树的子结构[数据结构]
- 数据结构(c)——队列
- 数据结构_写程序计算给定多项式在给定点处的值
- 【数据结构】堆的实现以及简单的函数
- 数据结构-栈的实现之运算式求值
- MySQL索引背后的数据结构及算法原理
- 数据结构_分别使用for循环和递归打印1-N的所有整数,比较运行时间
- 数据结构之高级排序算法
- 6.oracle的dump理解六 块数据结构
- 第一次作业(数据结构)
- 基数排序
- 【数据结构】堆的实现(包括:默认成员函数,插元素push,删元素pop,访问根节点top,判空,大小)
- R的数据结构
- union与enum数据结构
- 【DS】数据结构--二叉树实现
- 算法和数据结构学习(一)基于数组的栈的实现