Ordenación rápida (pozo lleno y el intercambio)

Acerca de ordenación rápida, puede hacer referencia a la siguiente artículo:

  1. pozo lleno
  2. intercambio

Nota: La naturaleza del cambio es para llenar el agujero, llenar el agujero simplemente intercambiar los dos se combinaron en un solo cambio.

Soy también el código de la clase:

pozo lleno

public void quickSort(int[] nums,int low,int high){
		/*
		 * 由于快速排序需要递归,递归的每层作用的数据结构其实是原数组上的一部分,所以参数中引入low和high
		 * 本快速排序中关于元素位置的调整使用填坑法。
		 */
		if(low<high){
			//只有low<high时,才进行排序;否则,low==high说明是单个元素,不排序
			int curr = nums[low];//记录主元
			int i = low;
			int j = high;
			while(i<j){
				/*
				 * 主元选最左侧元素时,先移动右指针,这是基于最后i==j的情况设计的。
				 * 试想,上次i的停留位置,被交换过来一个小于主元的元素,
				 * 当j--移动到i==j循环结束时,此时i、j共同指向的这个元素是i之前指向的一个比主元小的元素,
				 * 因此可以理所应当地将其与位于最左边的主元进行交换。
				 * 同理,当主元选最右侧元素时,先移动的应该是左指针。
				 */
				while(i<j && nums[j]>=curr){
					j--;
				}
				if(i<j){
					//找到一个比主元小的右侧元素,填上一个坑
					nums[i] = nums[j];
					i++;
				}
				while(i<j && nums[i]<curr){
					i++;
				}
				if(i<j){
					//找到一个比主元大的左侧元素,填上一个坑
					nums[j] = nums[i];
					j--;
				}
			}
			//i==j,指向主元的最终位置,用主元填这个坑
			nums[i] = curr;
			//分治策略
			quickSort(nums,low,i-1);
			quickSort(nums,i+1,high);
		}
	}

intercambio

public void quickSort(int[] nums,int low,int high){
		/*
		 * 由于快速排序需要递归,递归的每层作用的数据结构其实是原数组上的一部分,所以参数中引入low和high
		 * 本快速排序中关于元素位置的调整使用交换法。
		 */
		if(low<high){
			//只有low<high时,才进行排序;否则,low==high说明是单个元素,不排序
			int i=low;
			int j=high;
			int curr=nums[low];//记录主元
			while(i<j){
				/*
				 * 主元选最左侧元素时,先移动右指针,这是基于最后i==j的情况设计的。
				 * 试想,上次i的停留位置,被交换过来一个小于主元的元素,
				 * 当j--移动到i==j循环结束时,此时i、j共同指向的这个元素是i之前指向的一个比主元小的元素,
				 * 因此可以理所应当地将其与位于最左边的主元进行交换。
				 * 同理,当主元选最右侧元素时,先移动的应该是左指针。
				 */
				while(i<j && nums[j]>curr){
					j--;
				}
				while(i<j && nums[i]<=curr){
					i++;
				}
				if(i<j){
					//将主元最终位置左侧比主元大的元素与右侧比主元小的元素进行交换
					int temp = nums[i];
					nums[i] = nums[j];
					nums[j] = temp;
				}
			}
			//将主元与最终位置上的元素位置互换
			nums[low] = nums[i];
			nums[i] = curr;
			//分治策略
			quickSort(nums,low,i-1);
			quickSort(nums,i+1,high);
		}
	}

Comparación de rendimiento

Leetcode de 912 preguntas, se presentaron dos métodos, el funcionamiento es el siguiente:
Comparación de rendimiento

Publicado 75 artículos originales · ganado elogios 0 · Vistas 1495

Supongo que te gusta

Origin blog.csdn.net/qq_34087914/article/details/104342227
Recomendado
Clasificación