Varios algoritmos de clasificación de uso común (clasificación de burbujas, clasificación rápida, clasificación selectiva)

En la era actual de big data, el procesamiento de datos es particularmente importante. Hoy les presentaré dos algoritmos de clasificación comunes: clasificación de burbujas, clasificación rápida y clasificación selectiva.

(1) Tipo de burbuja

La idea básica:

Si desea clasificar n números uno por uno, debe comparar n-1 veces. En la primera comparación, debe comparar n-1 veces. En la j-ésima comparación, debe comparar nj veces. Por lo tanto, solo se necesitan dos bucles for para implementar este algoritmo.

el código se muestra a continuación:

#include<stdio.h>
void Fun(int arr[])
{
    
     
	int i,j;
	int temp;
	for(i=0;i<10;i++)
		for(j=0;j<9;j++)
			if(arr[j]<arr[j+1])
			{
    
    
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
			for(int i=0;i<10;i++)
			{
    
    
				printf("%d ",arr[i]);
			}
}
int main()
{
    
    
	int arr[]={
    
    8,5,4,3,8,7,9,5,3,2};           //定义10个长度的数组存放数据,实例化十个参数
	Fun(arr);
	return 0;
}

Los resultados son los siguientes:

Inserte la descripción de la imagen aquí

(2) Clasificación rápida

La idea básica:

Entre los n datos que se van a ordenar, tome el primero como valor de referencia y divida todos los datos en tres grupos. Todos los valores de los datos del primer grupo son menores o iguales que el segundo grupo de valores de referencia, y todos los valores de los datos del tercer grupo son mayores o iguales que el segundo grupo de valores de referencia. Esto completa la primera división Repita el método anterior para el primer y tercer grupo hasta que solo haya un dato en cada grupo.

el código se muestra a continuación:

#include<stdio.h>                             //快排
void quicksort(int arr[],int start,int end)
{
	int i,j;
	i=start;
	j=end;
	arr[0]=arr[start];
	while(i<j)
	{
		while(i<j && arr[0]<arr[j])
			j--;
		if(i<j)
		{
			arr[i]=arr[j];
			i++;
		}
		while(i<j && arr[i]<=arr[0])
			i++;
		if(i<j)
		{
			arr[j]=arr[i];
			j--;
		}
	}
	arr[i]=arr[0];
	if(start<i)
		quicksort(arr,start,j-1);
	if(i<end)
		quicksort(arr,j+1,end);
}
int main()
{
	int i;
	int arr[11];
	for(i=1;i<=10;i++)
	{
		scanf_s("%d",&arr[i]);
	}
	quicksort(arr,1,10);
	for(int i=1;i<=10;i++)
	{
		printf("%d ",arr[i]);
	}
	puts("");
	return 0;
}

Los resultados de la ejecución del código son los siguientes:

Inserte la descripción de la imagen aquí

(3) Orden de selección

el código se muestra a continuación:

#include<stdio.h>                                //选择排序
void Fun(int *arr,int len)
{
	int min;
	int i;
	for( i=0;i<len;i++)
	{
		 min=i;                                               //找到初始值min
		for(int j=i+1;j<len;j++)
		{
			if(arr[j]<arr[min])                           //比较min和j的大小
				min=j;
		}
		if(min!=i)
		{
			int temp=arr[i];                               //
			arr[i]=arr[min];
			arr[min]=temp;
		}
	}
	
}
int main()
{
	
	int arr[]={4,3,5,6,2,7,6,9,8,1};                              //测试用例 (1,2,3,4,5,6,6,7,8,9)
	int len= sizeof(arr)/sizeof (arr[0]);                       //求数组长度
	Fun(arr,10);                                               //调用Fun函数
	for(int i=0;i<len;i++)
	{
		printf("%d ",arr[i]);
	}
	return 0;
}

Los resultados son los siguientes:

Inserte la descripción de la imagen aquí
¡Espero que te ayude!

Supongo que te gusta

Origin blog.csdn.net/Gunanhuai/article/details/88846045
Recomendado
Clasificación