int main(void) { int array[NUM]; clock_t start, end; double st,bt; //s_sort time,b_sort time initialize(array); disp_array(array); start = clock(); s_sort(array); end = clock(); disp_array(array); st = (double)(end-start)/CLOCKS_PER_SEC; start = clock(); initialize(array); b_sort(array); end = clock(); disp_array(array); bt = (double)(end-start)/CLOCKS_PER_SEC; printf("simple compare:%d\nchange:%d\n",s_co_count,s_ch_count); printf("TIME:%lf\n",st); printf("bubble compare:%d\nchange:%d\n",b_co_count,b_ch_count); printf("TIME:%lf\n",bt); return 0; }
static void test_normal_b_sort() { size_t i; int32_t ary[] = {0,10,1,9,2,8,3,7,4,6,5}; int32_t ref[] = {0,1,2,3,4,5,6,7,8,9,10}; b_sort(ary,ARRAY_SIZE(ary)); for(i = 0;i < ARRAY_SIZE(ary);i++) { CU_ASSERT_EQUAL(ref[i],ary[i]); } }
void cmd_sort(int column) {//sort関数の分岐 int flag = 0; if (column < 0){ flag = 1; column = -column; } number = 0; if(1 <= column && column <= 5){ b_sort(column); } else if(column == 6) q_sort(0, profile_data_nitems - 1); else if(column == 7) flag = 1; else printf("Failed to execute Sort\n"); if(flag == 1) reverse_order(); printf("Number = %d\n", number); }
void BucketSort::sort(unsigned int numCores) { std::vector<std::shared_ptr<std::thread>> threads1; std::function<void(unsigned int id)> b_push; b_push = [this, &numCores] (unsigned int id) { int num; for (unsigned int i=0;i<numbersToSort.size();++i) { //std::cout << i << " " << id << " " << numCores << " " << numbersToSort.size()-numCores << std::endl; num = BucketSort::lead(numbersToSort[i]); if (num%numCores == id) vecs[num].push_back(numbersToSort[i]); } }; for (unsigned int i = 1; i < numCores; ++i) { threads1.push_back(std::make_shared<std::thread>(b_push, i)); } b_push(0); for (auto t : threads1) { t->join(); } /* for (unsigned int n : numbersToSort) { vecs[BucketSort::lead(n)].push_back(n); } */ int work = 9; std::mutex mutexWork; std::function<void()> b_sort; b_sort = [this, &work, &mutexWork, &b_sort] () { mutexWork.lock(); //std::cout << "working on: " << work << std::endl; int i = work--; mutexWork.unlock(); std::sort(vecs[i].begin(),vecs[i].end()); if (work>0) b_sort(); }; std::vector<std::shared_ptr<std::thread>> threads2; for (unsigned int i = 1; i < numCores; ++i) { threads2.push_back(std::make_shared<std::thread>(b_sort)); } b_sort(); numbersToSort.clear(); numbersToSort.reserve(vecs[1].size() + vecs[2].size() + vecs[3].size() + vecs[4].size() + vecs[5].size() + vecs[6].size() + vecs[7].size() + vecs[8].size() + vecs[9].size()); for (auto t : threads2) { t->join(); } numbersToSort = std::move(vecs[1]); std::move(std::begin(vecs[2]), std::end(vecs[2]), std::back_inserter(numbersToSort)); std::move(std::begin(vecs[3]), std::end(vecs[3]), std::back_inserter(numbersToSort)); std::move(std::begin(vecs[4]), std::end(vecs[4]), std::back_inserter(numbersToSort)); std::move(std::begin(vecs[5]), std::end(vecs[5]), std::back_inserter(numbersToSort)); std::move(std::begin(vecs[6]), std::end(vecs[6]), std::back_inserter(numbersToSort)); std::move(std::begin(vecs[7]), std::end(vecs[7]), std::back_inserter(numbersToSort)); std::move(std::begin(vecs[8]), std::end(vecs[8]), std::back_inserter(numbersToSort)); std::move(std::begin(vecs[9]), std::end(vecs[9]), std::back_inserter(numbersToSort)); }