以下C语言实现的结构体数组排序代码属于哪一种排序算法?
你提供的代码如下:
void sortPR(stuct m *arr, int n_nodes) { for (int i = 0; i < n_nodes; i++) { // Sort in descending order for weight for (int k = i + 1; k < n_nodes; k++) { // If weight equal, sort alphabetically if (arr[i].weight == arr[k].weight) { // Sort alphabetically if (strcmp(arr[i].name, arr[k].name) > 0) { swap(&arr[i], &arr[k]); } } else if (arr[i].weight < arr[k].weight) { swap(&arr[i], &arr[k]); } } } }
排序算法判定结果
这段代码实现的是选择排序(Selection Sort),是适配你自定义多字段排序规则的变体实现。
判定核心依据
- 整体采用两层嵌套循环结构,外层循环的变量
i标记已排序区间的末尾下标,每次迭代确定i位置的最终元素,逐步从前往后构建完整的有序数组。 - 内层循环遍历
i之后所有未排序的元素,直接和i位置的元素做比较:- 若
i位置元素的weight值更小,就交换两个元素,保证已排序区间始终满足weight降序的要求 - 若两个元素weight值相等,则比较name字段的字典序,若
i位置的name字典序更靠后就交换,保证同weight下name升序的要求
- 若
- 整体时间复杂度为O(n²),比较次数固定为
n*(n-1)/2次,完全符合选择排序的典型特征。
内容的提问来源于stack exchange,提问作者JXTN
相关产品推荐
相关产品推荐

