示例#1
0
void __quick_sort(int a[], int l, int r)
{
	int pivotloc;

	if (l >= r)
		return;

	pivotloc = partition(a, l, r);

	__quick_sort(a, l, pivotloc - 1);
	__quick_sort(a, pivotloc + 1, r);
}
示例#2
0
文件: quick_sort.c 项目: chenws/codes
static void __quick_sort(void *base, size_t num, size_t size,
                         CMP_FUNC cmpf, SWAP_FUNC swapf)
{
    unsigned int k;
    __assert(base && cmpf);
    if (!swapf)
        swapf = (size == 4 ? __swap : swap_dft);
    if (num > 1)
    {
        k = __quick_once(base,num,size,cmpf,swapf);
        __quick_sort(base, k, size, cmpf, swapf);
        __quick_sort((char*)base+(k+1)*size, num-k-1, size, cmpf, swapf);
    }
}
示例#3
0
文件: quick_sort.c 项目: chenws/codes
void quick_sort(void *base, size_t num, size_t size,
                CMP_FUNC cmpf, SWAP_FUNC swapf)
{
    __dump(base, num, size);
    __quick_sort(base, num, size, cmpf, swapf);
    __dump(base, num, size);
    __verify(base, num, size, cmpf);
}
示例#4
0
static SR_INLINE int __quick_sort(SORTARRAY PARAM_INOUT array,
	const SORTARRAY_ITERATOR_ITR PARAM_IN iterator_low_,
	const SORTARRAY_ITERATOR_ITR PARAM_IN iterator_high_)
{
	SORTARRAY_ITERATOR_INSTANCE  iterator_low;
	SORTARRAY_ITERATOR_INSTANCE  iterator_high;
	SORTARRAY_ITERATOR_INSTANCE  iterator_clip;
	int status;

	// 排序的数量很少,使用插入排序优化
	if (CHECK_ENTER_INSERT_SORT(array, iterator_low, iterator_high))
	{
		return QUICKSORT_INSERT_SORT(array, iterator_low, iterator_high);
	}
	
	// 开始快速排序(递归法)
	SORTARRAY_ITR_COPY(array, 
		               GET_ITERATOR_INSTANCE_ADDR(iterator_high), 
					   iterator_high_);
	SORTARRAY_ITR_COPY(array, 
		               GET_ITERATOR_INSTANCE_ADDR(iterator_low), 
					   iterator_low_);

	status = __order_partition(array, 
		                       GET_ITERATOR_INSTANCE_ADDR(iterator_low), 
							   GET_ITERATOR_INSTANCE_ADDR(iterator_high), 
							   GET_ITERATOR_INSTANCE_ADDR_REF(iterator_clip));
	if (status < STATUS_OK)
	{
		return status;
	}

	SORTARRAY_ITR_COPY(array, 
		               GET_ITERATOR_INSTANCE_ADDR(iterator_high), 
					   iterator_high_);
	SORTARRAY_ITR_COPY(array, 
		               GET_ITERATOR_INSTANCE_ADDR(iterator_low), 
					   iterator_low_);

	if (0 != SORTARRAY_ITR_EQUELS(array, 
		               GET_ITERATOR_INSTANCE_ADDR(iterator_clip), 
					   GET_ITERATOR_INSTANCE_ADDR(iterator_low)))
	{
		SORTARRAY_ITERATOR_INSTANCE itmp_pre;
		SORTARRAY_ITR_COPY(array, 
			               GET_ITERATOR_INSTANCE_ADDR(itmp_pre), 
						   GET_ITERATOR_INSTANCE_ADDR(iterator_clip));
		SORTARRAY_ITR_DEC(array, 
			              GET_ITERATOR_INSTANCE_ADDR(itmp_pre));
		status = __quick_sort(array, 
			                  GET_ITERATOR_INSTANCE_ADDR(iterator_low), 
							  GET_ITERATOR_INSTANCE_ADDR(itmp_pre));
		if (status < STATUS_OK)
		{
			return status;
		}
	}

	if (0 != SORTARRAY_ITR_EQUELS(array, 
		                          GET_ITERATOR_INSTANCE_ADDR(iterator_clip), 
								  GET_ITERATOR_INSTANCE_ADDR(iterator_high)))
	{
		SORTARRAY_ITERATOR_INSTANCE itmp_next;
		SORTARRAY_ITR_COPY(array, 
			               GET_ITERATOR_INSTANCE_ADDR(itmp_next), 
			               GET_ITERATOR_INSTANCE_ADDR(iterator_clip));
		SORTARRAY_ITR_INC(array, 
			               GET_ITERATOR_INSTANCE_ADDR(itmp_next));

		status = __quick_sort(array, 
			                  GET_ITERATOR_INSTANCE_ADDR(itmp_next), 
							  GET_ITERATOR_INSTANCE_ADDR(iterator_high));
		if (status < STATUS_OK)
		{
			return status;
		}
	}

	return STATUS_OK;
}
示例#5
0
void quick_sort(int a[], int len)
{
	__quick_sort(a, 0, len - 1);
}