计数排序

来源:互联网 发布:数据库的简单实现 编辑:程序博客网 时间:2024/06/05 11:58
#include <iostream>#include <vector>using namespace std;class CountingSort {private:vector<int> vec;vector<int> vecCount;vector<int> result;public:void init();void initCount();void countingSort();void traverse();void traverseCount();void traverseResult();};void CountingSort::countingSort() {//for (vector<int>::reverse_iterator iter = vec.rbegin(); iter != vec.rend(); iter++) {//result.at(vecCount.at(*iter)-- - 1) = *iter;//}for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++) {result.at(vecCount.at(*iter)-- - 1) = *iter;}}void CountingSort::initCount() {for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++) {vecCount.at(*iter)++;}for (vector<int>::iterator iter = vecCount.begin() + 1; iter != vecCount.end(); iter++) {*iter = *iter + *(iter-1);}}void CountingSort::init() {std::cout << "how many elements(待排数值范围:0-9) do you want to enter:";int count;std::cin >> count;int element;for (int i = 0; i < count; i++) {std::cin >> element;vec.push_back(element);}result.resize(vec.size());vecCount.resize(10);initCount();}void CountingSort::traverse() {for (vector<int>::iterator iter = vec.begin(); iter != vec.end(); iter++) {std::cout << *iter;}std::cout << endl;}void CountingSort::traverseCount() {for (vector<int>::iterator iter = vecCount.begin(); iter != vecCount.end(); iter++) {std::cout << *iter;}std::cout << endl;}void CountingSort::traverseResult() {for (vector<int>::iterator iter = result.begin(); iter != result.end(); iter++) {std::cout << *iter;}std::cout << endl;}int main() {CountingSort *cs = new CountingSort();cs->init();cs->traverse();cs->traverseCount();cs->countingSort();cs->traverseResult();delete cs;return 0;}

0 0
原创粉丝点击