Пример #1
0
void quick_sort_partition(void * base,size_t left,size_t right,size_t size,int(* compare)(const void *,const void *)){
	size_t p=(left+right)/2;
	void * pivot=malloc(size);
	memcpy(pivot,base+p*size,size);
	size_t i,j;
	for(i=left,j=right;i<j;)
	{
		while(!(i>p||compare(pivot,base+i*size)<0))
				i++;
		if(i<p)
		{
			memcpy(base+p*size,base+i*size,size);
			p=i;
		}
		while(!(j<=p||compare(base+j*size,pivot)<0))
				j--;
		if(p<j)
		{
			memcpy(base+p*size,base+j*size,size);
			p=j;
		}
	}
	memcpy(base+p*size,pivot,size);
	free(pivot);
	if(p-left>1)
			quick_sort_partition(base,left,p-1,size,compare);
	if(right-p>1)
			quick_sort_partition(base,p+1,right,size,compare);
}
Пример #2
0
 void operator()(T* first, T* last) {
   // Assume pointers values are incremental
   if (first < last) {
     T* p = quick_sort_partition(first, last);
     operator()(first, p);
     operator()(p + 1, last);
   }
 }  // end of operator()
Пример #3
0
void quick_sort(int a[], int start, int end) {
  if(end <= start) // why less than happens ( this is because partion +/- 1
    return;
  int partition = quick_sort_partition(a, start, end);
  //print();
  quick_sort(a, start, partition-1); 
  quick_sort(a, partition+1, end); 
}
Пример #4
0
void Sort::partial_quick_sort(std::vector<int>& _source, int _from, int _to) {
	if (_from > _to)
		return;

	int v = quick_sort_partition(_source, _from, _to);

	partial_quick_sort(_source, _from, v-1);
	partial_quick_sort(_source, v+1, _to);
}
Пример #5
0
		void quick_sort(T* elements, size_t low, size_t high, int(*compare)(const T&, const T&)) {
			while (true) {
				if (low >= high)
					return;
				
				size_t new_pivot = quick_sort_partition(elements, low, high, (low+high)/2, compare);
				
				if (new_pivot != 0)
					quick_sort(elements, low, new_pivot-1, compare);
				
				if (new_pivot >= m_size-1)
					low = new_pivot + 1;
				else
					break;
			}
		}
Пример #6
0
void quick_sort(void* base,size_t nmemb,size_t size ,int(*compare)(const void *,const void*)){
#ifdef PRINT_FUNCTION_NAME
	printf("%s\n",__FUNCTION__);
#endif
	quick_sort_partition(base,0,nmemb-1,size,compare);
}