示例#1
0
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;
}
示例#2
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]);
    }
}
示例#3
0
文件: net_pro.c 项目: kota395/np
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));

}