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
- 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.
- 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
- 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
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.
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
superior del elemento montón 8 y el extremo del elemento de cambio 5, para obtener un segundo elemento grande 8
en el método a tal de secuencia repetida se obtiene finalmente:
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: