示例#1
0
void quicksort(int * arr, int begin, int end)
{
	if (end - begin < 50)
	{
		insertionSort(arr, begin, end);
		return;
	}

	int pivot = selectPivot(arr, begin, end-1);
	int l = begin;
	int u = end - 2;

	while (1)
	{
		while (arr[++l] < pivot);
		while (arr[--u] > pivot);

		if (l < u)
			swap(arr[l], arr[u]);
		else
			break;
	}

	swap(arr[l], arr[end - 1]);

	quicksort(arr, begin, l);
	quicksort(arr, l, end);
}
示例#2
0
unsigned int findMinimumKSmartPivot(unsigned long* data, int length, unsigned int k) {
   int pos = 0;
   unsigned long * array = data;
   int len = length;
   int count = 0;

   while(1) {
     count ++;
     unsigned long pivot = selectPivot(array, len);
     //printf("pivot is %lu, len is %d\n", pivot, len);
     int posT = partialQuickSortByPivotValue(array, len, pivot);
     //printf("posT is %d\n", posT);
     //printArray(array, len);
     if(pos+posT+1 == k) {
        break;
     } else if (pos+posT+1 < k) {
        pos += posT+1;
        array += posT+1;
        len = len - posT - 1;
     } else {
        len = posT;
     }
   }
   return data[k-1];
}
示例#3
0
void quicksort (float* arr, int size)
{
  if (size <= 1) return;
  else{
    int pivot = selectPivot (arr, size);
    swp (arr[size-1], arr[pivot]);
    pivot = size-1;
    
    // put all values less than the pivot value after the pivot
    for (int i=0; i < pivot;){
      if ( (arr[i] < arr[pivot]) ){
        swp (arr[i], arr[pivot-1]);
        swp (arr[pivot-1], arr[pivot]);
        pivot--;
      }
      else{
        i++;
      }
    }
    quicksort (arr, pivot);
    quicksort (arr+pivot, size-pivot);
  }
}