[C ++] - algún tipo simple y pila de clasificación detallada

Este blog burbuja única especie introducida, la ordenación por inserción, seleccionar, ordenar y pila de clasificación detallada

Ordenamiento de burbuja, la ordenación por inserción, ordenación por selección

Debido a que estos tipos de especie son relativamente simples, otros bloggers han escrito muy perfecto, solamente voy a dar mi código, junto con la parte posterior de la pila de clasificación resultados del ensayo se dan golpes:

void Bubblesort(int *a, int n)   //冒泡排序
{
	for (int i = 0; i < n - 1; i++)
	{
		for (int j = 0; j < n - i - 1; j++)
		{
			if (a[j] > a[j + 1])
			{
				int temp = a[j];
				a[j] = a[j + 1];
				a[j + 1] = temp;
			}
		}
	}
}

void Selectsort(int *a, int n)  //选择排序  不断选出每一躺中最小的元素
{
	int temp = 0;
	for (int i = 0; i < n; i++)
	{
		temp = i;
		for (int j = i + 1; j < n; j++)
		{
			if (a[j] < a[temp])
			{
				temp = j;
			}
		}
		int ret = a[i];
		a[i] = a[temp];
		a[temp] = ret;
	}
}

void InsertSort(int *a, int n)   //插入排序:像是打牌一样,不断的前插
{
	for (int i = 1; i < n; i++)
	{
		for (int j = i - 1; j >= 0; j--)
		{						//  j      i
			if (a[i] < a[j])   // 7 9   -> 5
			{
				a[j--] = a[i];
			}
		}
	}
}

montón Definición

Valor de cada nodo es igual o mayor que el valor de los nodos hijos izquierdo y derecho, referido como pila una tapa grande; cada nodo o un valor menor que o igual que el valor de los nodos hijos izquierdo y derecho, llamada pequeña parte superior de la pila.

  • El uso de un gran ascendente superior de la pila, descendiendo pila con una pequeña parte superior

La idea básica de la pila de clasificación

Para ascendiendo secuencia se ordenarán constituye una pila grande superior (y viceversa es una pequeña pila superior) En este caso, el valor máximo del nodo raíz es la parte superior de toda la secuencia, se intercambia con el último elemento de la matriz pila en este caso el elemento final es el máximo, entonces los restantes n-1 digital de re-construir una pila de n tal sub-banda tienen una pequeña elementos de valor. Así repetidamente ejecutada, puede obtener una secuencia ordenada.

Como se ilustra: Supongamos que desea ordenar 4,6,8,5,9
Aquí Insertar imagen Descripción

  • En primer lugar, comenzamos con el primer nodo no hoja, el nodo es 6, de izquierda a derecha, de abajo para ajustar la isla, a la.
    Aquí Insertar imagen Descripción
  • Buscar un segundo nodos que no son hojas, es decir, 4, ya que [4,9,8], el máximo 9, 4 y 9 así intercambiada
    Aquí Insertar imagen Descripción
  • El tercer paso, después de un intercambio de los cables [4,5,6] estructura caótica, continúe para ajustar, en [4,5,6] 6 máximo, intercambio, 4 y 6
    Aquí Insertar imagen Descripción
    en este momento que va a construir una secuencia caótica en un gran superior de la pila.
    El siguiente paso importante es la segunda, la parte superior del elemento de la pila 9 y los elementos de intercambio de extremo 4, y luego ajustar la pila restante de la n-1 basado en los elementos anteriores, la reconstrucción de manera intercambiada repetidamente.
    Aquí Insertar imagen Descripción
    Continuar para sintonizar el montón, ya que el un nodo no hoja penúltima 6 es más grande que sus hijos, no hacer sintonizar el montón, y luego continuar con la no hoja penúltima nodos 4 a 8 niños pequeños bien, así que intercambia una vez más
    Aquí Insertar imagen Descripción
    superior del elemento montón 8 y el extremo del elemento de cambio 5, para obtener un segundo elemento grande 8
    Aquí Insertar imagen Descripciónen el método a tal de secuencia repetida se obtiene finalmente:
    Aquí Insertar imagen Descripción
    código de pila de clasificación:
void HeapAjustUp(int* a,int i,int n)  //升序需要向上调堆,最后得出的堆是大顶堆
{  //n表示的是堆的大小,i表示开始从i这个位置开始调堆
	int parent = i;
	int child = 2 * i + 1;

	while (child < n)
	{
		if (a[child] < a[child + 1] && child + 1 < n)
			child++;

		if (a[parent] < a[child])
		{
			swap(&a[parent], &a[child]);
			parent = child;
		}
		child = child * 2 + 1;
	}
}

void BuidHeap(int *a,int heapsize)
{
	for (int i = heapsize / 2 - 1; i >= 0; i--)
	{
		HeapAjustUp(a, i, heapsize);
	}
}
void HeapSort(int *a, int heapsize)
{
	BuidHeap(a, heapsize);
	for (int i = heapsize-1; i > 0; i--)
	{
		swap(&a[0], &a[i]);   //将第一个和最后一个元素交换
		HeapAjustUp(a,0,i);
	}

}

Este tipo de resultado de varias capturas de pantalla:
Aquí Insertar imagen Descripción

Publicado 33 artículos originales · alabanza ganado 13 · vistas 1054

Supongo que te gusta

Origin blog.csdn.net/Vicky_Cr/article/details/104414382
Recomendado
Clasificación