Imitar la función de qsort para implementar una función de burbujeo general

1. Ejemplo de código (tome el orden ascendente como ejemplo)

1. Definición de función de devolución de llamada menor: En el problema de clasificación, hay un orden ascendente y un orden descendente. Usando una función de devolución de llamada, el proceso determina automáticamente el marco de secuencia a qué hora llamar. (La función de devolución de llamada es un uso típico del puntero de función)

El siguiente código significa:

Si a es menor que b, devuelve un número positivo

Si a es igual ab, devuelve 0

Si a es mayor que b, devuelve un número negativo

int less(int a, int b)
{
	return a-b;
}

2. Defina el tipo de puntero de función Cmp (typedef: dar un alias a un tipo existente)

typedef int(*Cmp)(int, int);

3. Clasificación de burbujas

void bubbleSort(int arr[],int len,Cmp cmp)
{
	int temp=0;
	//bound是一个边界,表示已排区间[0,bound],bound控制循环次数,直到bound=len-1,排序结束
	//待排区间(bound,cur],直到cur等于bound+1,排序结束

	for (int bound = 0; bound < len; bound++){
		for (int cur = len - 1; cur>bound; cur--){
            //传入参数前一个元素和后一个元素,cmp的返回值>0,表示arr[cur-1]>arr[cur]
            //不满足升序,所以交换位置
			if (cmp(arr[cur-1],arr[cur])>0){
				temp = arr[cur-1];
				arr[cur-1] = arr[cur];
				arr[cur] = temp;
			}
		}
	}
}

4. Función principal

int main()
{
	int arr[] = {9,3,5,7,4};
	int len = sizeof(arr) / sizeof(arr[0]);
    //传入数组名,数组的长度,less函数
	bubbleSort(arr,len,less);
	for (int i = 0; i < len; i++){
		printf("%d ", arr[i]);
	}
	printf("\n");
	system("pause");
	return 0;
}

Dos, resultados en ejecución

3. Suplemento:

Si desea ordenar en orden descendente, solo necesita modificar el valor de retorno de la función de devolución de llamada menos a ba.

Supongo que te gusta

Origin blog.csdn.net/weixin_43939602/article/details/109805967
Recomendado
Clasificación