泛型算法之 replace_copy()函数

如下代码 

int main() {
vector<int> a, b;
for(int i = 0; i != 10; ++i)
a.push_back(i);
replace_copy(a.cbegin(), a.cend(),
back_inserter(b), 0, 32);
for(auto i = b.begin(); i !=b.end(); ++i)
cout<<*i<<endl;
}

该函数先copy一个a的副本tmp,然后将tmp中的0执行replace为32,最后用back_inserter()法一个一个插入b的结尾。

————————————————————————————————————————————————————————

快速排序

剑指offer版本


void ksort(int *a, int low, int high) {
int index = low;
// int end = high;
int key = a[high];
int small = low - 1;
for(index = low; index < high; ++index) {
if(a[index] < a[high]) {
++small;
if(small != index)
swap(a[small], a[index]);
}
}
++small;
swap(a[high], a[small]);
// return small;
if(small < high)
ksort(a, small + 1, high);
if(small > low)
ksort(a, low, small - 1);
};

6. 29 重写版本 循环加上=使得省略两行代码

void ksort(int *data, int low, int high) {
int index = low;
int small = low - 1;
int key = data[high];

for(index = low; index <= high; ++index)
if(data[index] <= key) {
++small;
if(small != index)
swap(data[small], data[index]);
}
// ++small;
// swap(data[small],data[high]);
if(small > low)
ksort(data, low, small - 1);
if(small < high)
ksort(data, small + 1, high);
};

百度百科快速排序版本:第一次出错在循环中忽略了‘=’

void ksort(int *data, int low, int high) {
int start = low;
int end = high;
int key = data[start];
while(start < end) {
while(start < end && data[end] >= key)
--end;
data[start] = data[end];
while(start < end && data[start] <= key)
++start;
data[end] = data[start];
}
data[end] = key;
if(start > low)
ksort(data, low, start - 1);
if(start < high)
ksort(data, start + 1, high);
}//最后end和start指针会指向同一个位置

 

posted on 2017-06-28 19:26  bloomingFlower  阅读(108)  评论(0编辑  收藏  举报