快速排序

void quickSort(int[] pDataNum, int left, int right) {
	int i, j;
	int iTemp, middle;
	i = left;
	j = right;
	middle = pDataNum[(left + right) / 2];//取数组中间的元素作为比较值
	do {
		//从数组左边元素开始与比较值(middle)比较,
		//如果小于比较值,则取下一个数字继续比较,直到找到大于等于middle的值
		while ((pDataNum[i] < middle) && (i < right))
			i++;
		//从数组右边元素开始与比较值(middle)比较,
		//如果大于比较值,则取下一个数字继续比较,直到找到小于等于middle的值
		while ((pDataNum[j] > middle) && (j > left))
			j--;
		if (i <= j) {//如果此时数组的下标没有交错,将左右查找的数组值互换

			iTemp = pDataNum[i];
			pDataNum[i] = pDataNum[j];
			pDataNum[j] = iTemp;

			i++; //左指针向右移动一位,从数组下一个位置开始与中间值(middle)比较
			j--; //右指针向左移动一位,从数组下一个位置开始与中间值(middle)比较

		}
	} while (i <= j);// 如果两边扫描的下标交错,就停止(完成一次)
	//程序运行到此处,说明数组下标已经交错,中间值右边的都是大于中间值的元素
	//而左边都是小于中间值的元素
	if (left < j)
		quickSort(pDataNum, left, j);

	if (right > i)
		quickSort(pDataNum, i, right);
} 


快速排序法的特性是不稳定排序,即相同的元素在排序后的顺序与排序前的顺序不太一样。

另外空间复杂度即为使用递归的深度,一般情况的空间复杂度介于O(log2 n)与O(n)之间O(log2 n),最好的情况为,最坏的情况为O(n)

你可能感兴趣的:(J#)