改进点:使用快速排序算法代替第六章中的Kruskal算法的冒泡排序。Kruskal算法的时间复杂度取决于排序算法的时间复杂度。冒泡排序时Kruskal算法的时间复杂度为O(M^2),改用快速排序后,时间复杂度降为O(M * logM)。其中M为图中边的数量。注意,用三路快速排序、双基准三路快速排序等改进的快速排序算法,不要用原始的快速排序。
#include <stdio.h>
#include <stdlib.h>
//定义一个边的结构体。一条边需要起点、终点和长度
struct Edge{
int startIndex, endIndex, distance;
};
int n = 6; //6个点
int m = 10; //一共10条边
struct Edge arrEdge[10]; //存放10条边的一个数组
int arr[6 + 1]; //并查集用的一维数组,不使用下标为0的元素,所以要 + 1
void initEdge() //初始化所有边
{
arrEdge[0].startIndex = 0; arrEdge[0].endIndex = 1; arrEdge[0].distance = 10;
arrEdge[1].startIndex = 0; arrEdge[1].endIndex = 2; arrEdge[1].distance = 16;
arrEdge[2].startIndex = 0; arrEdge[2].endIndex = 3; arrEdge[2].distance = 14;
arrEdge[3].startIndex = 1; arrEdge[3].endIndex = 3; arrEdge[3].distance = 15<