c/c++
huhuichun
这个作者很懒,什么都没留下…
展开
-
编写程序时关于字符串时的一些主要函数
1.string其支持长度可变的字符串,是一个标准的库,在使用时需要加#include头文件,可用getline函数读取整行文本,亦可用cin读取一个以空白字符分割的字符串(1)getline函数:接受两个参数,一个输入流对象和一个string对象;它从输入流的下一行读取,并保存读取的内容到string中,但不包括换行符;但是getline函数并不忽略行开头的换行符,所以在使用此函数时,如原创 2015-07-08 21:09:14 · 421 阅读 · 0 评论 -
折半查找
//折半查找又称为二分查找,仅适用于事先已经排好序的顺序表。其查找的基本思想是:首先将给定值key与表中中间位置的关键字进行比较,若//相等,则查找成功,返回该元素的存储位置;若不等,则所需查找的元素只能在中间数据以外的前半部分或后半部分中。然后在缩小的范围内//继续进行同样的查找,如此重复直到找到为止。算法如下:#includeusing namespace std;int Binar原创 2015-07-16 21:44:25 · 372 阅读 · 0 评论 -
原路归并排序
//原地归并排序不需要辅助数组即可归并。关键在于merge这个函数。#includeusing namespace std;void reverse(int *data,int n){ for(int i=0;i<n/2;i++) { swap(data[i],data[n-i-1]); }}//将含有n个元素的E数组向左循环移位i个位置void exchange(in原创 2015-07-11 17:42:08 · 682 阅读 · 0 评论 -
二路归并排序及数组中逆序对的计算
//二路归并排序,并计算逆序对的个数.二路归并排序算法的性能分析:空间复杂度为O(n),时间复杂度为O(nlog2n),具有稳定性#includeusing namespace std;int count=0;//计算数组中逆序对的个数//设两段有序表data[low...mid]、data[mid+1...high]存放在同一顺序表中相邻的位置上,先将他们复制到辅助数组b中。每次从对应原创 2015-07-10 10:28:07 · 597 阅读 · 0 评论 -
一个数组中存储有且仅有大写和小写字母,编写一个函数对数组内的字母重新排列,让小写字母在所有大写字母之前
//一个数组中存储有且仅有大写和小写字母,编写一个函数对数组内的字母重新排列,让小写字母在所有大写字母之前#includeusing namespace std;void Partition(char *a,int low,int high){ if(a==NULL||low>=high||low<0||high<0) return; while(low<high) { wh原创 2015-07-09 22:50:59 · 1114 阅读 · 0 评论 -
冒泡排序
冒泡排序的思想是:假设待排序表长为n,从前往后(或从后往前)两两比较相邻元素的值。其空间复杂度为O(1),时间复杂度为O(n^2),具有稳定性,每一趟排序都会将一个元素放到其最终的位置上#includeusing namespace std;void BubbleSort(int *data,int len){ if(data==NULL||len<=0) return;原创 2015-07-09 22:48:22 · 249 阅读 · 0 评论 -
合并两个排好序的链表
//合并两个有序的链表,使用递归和非递归的思想#includeusing namespace std;struct ListNode{ int m_nValue; ListNode* m_pNext;};ListNode* CreateListNode(int value){ ListNode* pNode = new ListNode(); pNode->m_n原创 2015-07-10 16:19:50 · 421 阅读 · 0 评论 -
将数组b合并到数组a中
//给定两个有序数组a和b,已知数组a末尾还有足够的空间容纳b,写一个函数将数组b合并到数组a中。//n:数组a中的元素个数//m:数组b中的元素个数#includeusing namespace std;void merge(int a[],int b[],int n,int m){ int k=n+m-1; int i=n-1; int j=m-1; while(i>=0&原创 2015-07-10 16:47:14 · 1100 阅读 · 0 评论 -
快速排序
快速排序的思想史基于分治的,其是递归的,需要 借助一个递归栈来保存每一层递归调用的必要信息,所以其空间复杂度为O(log2n),时间复杂度为O(nlog2n),快速排序是所有内部排序算法中平均性能最优的排序算法#include#includeusing namespace std;int RandomInRange(int start,int end){ srand(time原创 2015-07-09 22:43:51 · 298 阅读 · 0 评论 -
希尔排序
希尔排序的而思想是:先将待排序表分割成若干形如L[i,i+d,i+2d,...i+kd]的特殊子表,分别进行插入排序,当整个表中元素基本有序时,再对全体记录进行一次直接插入排序。//d:增量其空间复杂度为O(1),时间复杂度为O(n^1.3)#includeusing namespace std;void swap(int *a,int *b){ int c=*a;原创 2015-07-09 22:32:30 · 194 阅读 · 0 评论 -
选择排序
选择排序的思想是:每一趟在后面n-i+1个待排元素中选取关键字最小的元素,作为有序子序列的第i个元素。每排一次就可以确定一个元素的位置,其空间复杂度为O(1),时间复杂度为O(n^2),是一个不稳定的排序算法。#includeusing namespace std;void SelectSort(int *data,int len){ if(data==NULL||len<=0)原创 2015-07-09 22:31:19 · 193 阅读 · 0 评论 -
插入排序
插入排序是一直最直接的排序方法,其基本思想在于每次将一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中,知道全部记录查完为止。其时间复杂度为O(n^2),空间复杂度为O(1).具有稳定性#includeusing namespace std;void InsertSort(int *data,int len){ if(data==NULL||len<=0)原创 2015-07-09 22:25:14 · 259 阅读 · 0 评论 -
堆排序
#includeusing namespace std;//array是待调整的堆数组,i是待调整的数组元素的位置,nlength是数组的长度//本函数功能是:根据数组array构建大根堆void HeapAdjust(int data[],int i,int len){ //子结点的位置=2*(父结点位置)+1 int nchild; for(;2*i+1<len;i=nchi原创 2015-07-09 22:20:32 · 222 阅读 · 0 评论 -
用堆排序的思想求最小的k个数,处理海量数据
//最小的k个数//输入n个整数,输出其中最小的k个数//解答:虽然利用快排的思想很好的解决了问题,但是也有限制,首先我们需要一次性读入所以的数据,其次,需要修改输入的数组//利用堆排序来解决此问题,此种方法适合处理海量数据//首先我们先读入k个元素创建一个大小为k的大根堆,然后我们依次读入剩下的数据,如果当前数据比大根堆的堆顶小,则用这个数代替当前//堆顶,并调整堆使其原创 2015-07-09 22:11:50 · 783 阅读 · 1 评论 -
循环有序数组的查找
//有一个循环有序数组A,如何从这样的数组中寻找一个特定的元素呢?利用折半查找的思想#includeusing namespace std;int search(int data[],int low,int high,int key){ while(low<=high) { int mid=(high+low)/2; if(key==data[mid]) return m原创 2015-07-16 22:14:26 · 310 阅读 · 0 评论