顺序表算法补充
来源:互联网 发布:锥套皮带轮锥度算法 编辑:程序博客网 时间:2024/06/05 13:24
顺序表算法补充
对于上篇中的顺序表,仅仅是实现了简单的操作,现在对其添加二分查找,快速排序及其优化操作
说明:二分查找分别用循环,递归实现
冒泡排序改进:增加个岗哨监控是否交换,没有交换就证明顺序搞定,退出
选择排序:每次内存循环找到最大值与外层位置进行交换
选择排序改进优化:每次内存找到最大最小两个值,进行交换,循环次数减少一半。。
注: 如果各位有发现那些个不足之处,或者可改进之地,欢迎留言交流,共同进步。
<span style="font-size:18px;">//[]int BinarySearch(SeqList *pSeq, ElemType x){assert(pSeq);int left = 0;int right = pSeq->size - 1;while(left<=right){int cur = left+(right-left)/2;if(pSeq->array[cur] == x){return cur;}else if(pSeq->array[cur]>x){right = cur - 1;}elseleft = cur + 1;}return -1;}//////////////////////////////////递归实现二分查找int BinarySearch_R(SeqList *pSeq,int left,int right ,ElemType x){ if (left<=right) { int mid = left+(right-left)/2; if( x== pSeq->array[mid]) return mid; else if(x<pSeq->array[mid]) return BinarySearch_R(pSeq,left,mid-1,x); else if(x>pSeq->array[mid]) return BinarySearch_R(pSeq,mid+1,right,x); } else return -1; }//////////冒泡排序优化void BubbSort_op(SeqList *s){int exchange = 0;for(size_t i = 0; i < s->size-1;++i){for(size_t j = 0; j < s->size-1-i; ++j){if(s->array[j] > s->array[j+1]){ElemType tmp = s->array[j];s->array[j] = s->array[j+1];s->array[j+1] = tmp;exchange = 1;}}if(exchange == 0)return;}}/////////////////////选择排序void SelectSort(SeqList *s){for(size_t i = 0; i < s->size-1;++i){int maxind = i;for(size_t j = i+1; j < s->size; ++j){if(s->array[j] > s->array[maxind])maxind = j;}//change maxind and i;ElemType tmp = s->array[i];s->array[i] = s->array[maxind];s->array[maxind] = tmp;}}/////////////////////选择排序优化void SelectSort_op(SeqList *s){int max = s->size-1;int min = 0;//从两端往中间走,比较,循环次数缩小一半while(max >= min){int maxind = max;int minind = min;//当遇到刚好[6,5]时,尴尬了。兑换if(s->array[min]>s->array[max]){ElemType tmp1 = s->array[max];s->array[max] = s->array[min];s->array[min] = tmp1;}///找到最大最小值for(int i = min;i<=max;++i){if(s->array[i]>s->array[maxind]){maxind = i;}if(s->array[i]<s->array[minind]){minind = i;}}///兑换并缩小范围ElemType tmp = s->array[minind];s->array[minind] = s->array[min];s->array[min] = tmp;ElemType tmp1 = s->array[maxind];s->array[maxind] = s->array[max];s->array[max] = tmp1;max--;min++;}}</span>
0 0
- 顺序表算法补充
- 【补充】CSS加载顺序
- 顺序表查找算法
- 算法中顺序表
- 顺序表插入算法
- 顺序表基本算法
- 动态顺序表算法
- 顺序表查找算法
- 顺序表算法库
- 顺序表的算法
- 贪心算法的补充
- SIFT算法基本概念补充~
- PHP排序算法补充
- 补充的算法题
- 贪心算法知识点补充
- 排序算法--补充
- 顺序表操作算法实现
- 2.2顺序表的算法
- 天声人語 20151121 「切符を拝見」やめます
- HDOJ--3836--Equivalent Sets(tarjan算法)//求连接几个SCC最少的边
- Hive学习篇2
- [Unity通信]一个基于socket的3DARPG网络游戏(二):消息分类处理和json的使用
- Linux下vim插件
- 顺序表算法补充
- 单表查询SQL
- Android和JS的简单交互
- 英语中不“吃醋”,所以a touch of vinegar啥意思?
- SpringMVC Controller 介绍
- C# ODBC连接Mysql
- poj-1852
- UML学习:机房收费系统-用例图
- 日经春秋 20151121