摘要: class Solution {public: int reverse(int x) { int re; string s = to_string(x); auto l = s.begin(); auto r = prev(s.end()); if(*l=='-')l++; while(l<r){ ... 阅读全文
posted @ 2015-10-02 22:04 Lucas_1993 阅读(119) 评论(0) 推荐(0) 编辑
摘要: 首先将给定值key与表中中间位置元素的关键字比较,若相等,则查找成功,返回该元素的存储位置,若不等,则所需查找的元素只可能在中间元素以外的前半部分或后半部分中,然后在缩小的范围内继续进行同样的查找。int Binary_Search(SeqList L, ElemType key){ //在有序表L中查找关键字为key的元素,若存在则返回其位置,不存在则返回-1 int low=0, high=L... 阅读全文
posted @ 2015-08-22 20:06 Lucas_1993 阅读(133) 评论(0) 推荐(0) 编辑
摘要: 一般线性表的顺序查找从线性表的一端开始,逐个检查关键字是否满足给定的条件。若查找到某个元素的关键字满足条件,则成功,返回该元素在线性表中的位置,若是已经到了表的另一端,还没有查找到符合给定条件的元素,则返回查找失败的信息。typedef struct//查找表的数据结构{ ElemType* elem;//元素存储空间的基址,建表时按实际长度分配,0号单元留空 int TableLen;//表的长... 阅读全文
posted @ 2015-08-22 18:37 Lucas_1993 阅读(152) 评论(0) 推荐(0) 编辑
摘要: 将两个或者两个以上的有序表组合成一个新的有序表。假定待排序表有n个记录,则可以看成是n个有序的子表,每个子表长度为1,然后两两归并,得到[n/2]个长度为2或者1的有序表;然后两两归并,。。。如此重复,直到合并成一个长度为n的有序表为止,这个就是2-路归并排序。Merge()的功能就是将前后相邻的两个有序表归并为一个有序表的算法。设两段有序表A[low...mid], A[mid+1...high... 阅读全文
posted @ 2015-08-22 18:23 Lucas_1993 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 首先将存放在L[1...n]中的那个元素建成初始堆,由于堆本身的特点,堆顶元素就是最大值。输出堆顶元素后,通常将堆底元素送入堆顶,此时根节点已不满足大顶堆的性质,将堆顶元素向下调整使其继续保持大顶堆的性质,再输出堆顶元素,直到堆中只剩下一个元素为止。void AdjustDown(ElemType A[], int k, int len){ //函数AdjustDown是将元素i向下进行调整 A[... 阅读全文
posted @ 2015-08-22 16:05 Lucas_1993 阅读(139) 评论(0) 推荐(0) 编辑
摘要: 假设排序表为L[1...n],第i趟排序即从L[i...n]中选择关键字最小的元素与L(i)交换,每一趟排序即可确定一个元素的最终位置,这样经过n-1趟排序就可以使得整个排序表有序。void SelectSort(ElemType A[], int n){ for(i=0; i<n-1; i++)//一共进行n-1趟 { min=i;//记录最小元素的位置 for(j=i+1; j<n; j+... 阅读全文
posted @ 2015-08-22 15:37 Lucas_1993 阅读(105) 评论(0) 推荐(0) 编辑
摘要: 在待排序表中任取一个元素pivot作为基准,通过一趟排序将待排序表分为独立的两个部分,左半边小于pivot,右半边大于或者等于pivot,则pivot放在了其最终的位置L(k)上,这个过程称为一趟快速排序。而后分别对两个子表重复上述过程,直到每个部分内只有一个元素或者为空为止,即所有的元素都放在了其最终的位置。在选择pivot时,一般假设每次总是以当前表中的第一个元素作为枢轴值对表进行划分,则必须... 阅读全文
posted @ 2015-08-22 15:10 Lucas_1993 阅读(196) 评论(0) 推荐(0) 编辑
摘要: 假设待排序表长为n,从后向前(或从前往后)两两比较相邻元素的值,若为逆序,则交换他们,直到序列比较完,这是一趟冒泡排序,结果是将最小的元素交换到待排序列的第一个位置。下一趟排序的时候,前一趟确定的最小元素不在参与比较,待排序列减少一个元素,每趟冒泡排序的结果是把序列中的最小元素放到了序列的最终位置,……,这样最多做n-1趟冒泡就能把所有的元素排好序。void BubbleSort(ElemType... 阅读全文
posted @ 2015-08-22 14:37 Lucas_1993 阅读(345) 评论(0) 推荐(0) 编辑
摘要: 先将待排序表分割成若干个形如L[i,i+d,i+2d,i+3d,...i+kd]的特殊子表,分别进行直接插入排序,当整个表中的元素已经基本有序的时候,再对全体记录进行一次直接插入排序。先取一个小于n的步长d1,把表中的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中,在各组中进行直接插入排序;然后取第二个步长d2=1; dk=dk/2)//步长变化 { for(i=dk+1; i0... 阅读全文
posted @ 2015-08-22 14:34 Lucas_1993 阅读(141) 评论(0) 推荐(0) 编辑
摘要: 和直接插入排序相似,但是在查找有序子表的时候采用折半查找void InsertSort(ElemType A[], int n){ int i, j, low, high, mid; for(i=2; iA[0].key)//查找左半边子表 high=mid-1; else//查找右半边子表 low=mid+1; } for(j=i-1; j>=high+1; --j) A... 阅读全文
posted @ 2015-08-21 17:16 Lucas_1993 阅读(263) 评论(0) 推荐(0) 编辑