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:
(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:
(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:
¡Espero que te ayude!