示例#1
0
// another variant
static void quick_sort3(int32_t *a, int32_t low, int32_t high) {
  int32_t i, j, p, aux;

  if (high <= low + 1) return;

  i = low;
  j = high - 1;
  p = a[i];
  i ++;

  while (i <= j) {
    if (a[i] < p) {
      i ++;
    } else {
      aux = a[i]; a[i] = a[j]; a[j] = aux;
      j --;
    }
  }

  a[low] = a[j];
  a[j] = p;

  quick_sort3(a, low, j);
  quick_sort3(a, j+1, high);
}
示例#2
0
void quick_sort3(int array[], int low, int high)
{
    while (low < high)
    {
	int pivot = three_one_partition(array, low, high);
	if (pivot - low < high - pivot)
	{
	    quick_sort3(array, low, pivot-1);
	    low = pivot+1;
	}
	else
	{
	    quick_sort3(array, pivot+1, high);
	    high = pivot-1;
	}
    }
}
示例#3
0
int main(int argc, char *argv[])
{
    // int array[] = {2, 8, 7, 1, 3, 5, 6, 4};
    int array[] = {256, 19, 3, 21, 7, 5, 18};
    int array_length = sizeof(array) / sizeof(array[0]);
    // bubble_sort0(array, array_length);
    // bubble_sort(array, array_length);
    // bubble_sort2(array, array_length);
    // select_sort(array, array_length);
    // insert_sort(array, array_length);
    // shell_sort(array, array_length);
    // heap_sort(array, array_length);
    // merge_sort(array, 0, array_length);
    quick_sort3(array, 0, array_length-1);    //快排这个地方调用的时候第三个参数到底减不减1?效果都一样
					     //调用时第三个参数应该为array_length-1,
					     //因为算法导论中的数组是这么写的A[p,r] A[r]为边界元素
    for (int i = 0; i < array_length; ++i)
    {
	printf ("%d ", array[i]);
    }
    printf ("\n");

    return 0;
}
示例#4
0
static void sort3(int32_t *a, int32_t n) {
  quick_sort3(a, 0, n);
}