用C语言实现对单列表按优先级排序
时间: 2023-07-20 08:13:05 浏览: 111
在C语言中,我们可以使用堆排序(Heap Sort)算法对单列表按优先级进行排序。具体步骤如下:
1. 将单列表构建为一个堆(Heap),即满足堆属性的完全二叉树。堆属性指每个节点的值都大于等于(或小于等于)其子节点的值,这里我们以大根堆为例。
2. 将堆顶元素(即最大元素)与堆底元素交换,并将堆的大小减1(相当于将堆底元素“删除”)。然后对堆顶元素进行下滤(Sift Down)操作,使其重新满足堆属性。
3. 重复步骤2,直到堆的大小为1。
以下是使用C语言实现堆排序的代码:
```
#include <stdio.h>
void heapify(int arr[], int n, int i) {
int largest = i;
int l = 2 * i + 1;
int r = 2 * i + 2;
if (l < n && arr[l] > arr[largest])
largest = l;
if (r < n && arr[r] > arr[largest])
largest = r;
if (largest != i) {
int temp = arr[i];
arr[i] = arr[largest];
arr[largest] = temp;
heapify(arr, n, largest);
}
}
void heap_sort(int arr[], int n) {
for (int i = n / 2 - 1; i >= 0; i--)
heapify(arr, n, i);
for (int i = n - 1; i > 0; i--) {
int temp = arr[0];
arr[0] = arr[i];
arr[i] = temp;
heapify(arr, i, 0);
}
}
int main() {
int arr[] = { 4, 10, 3, 5, 1 };
int n = sizeof(arr) / sizeof(arr[0]);
heap_sort(arr, n);
for (int i = 0; i < n; i++)
printf("%d ", arr[i]);
return 0;
}
```
其中,arr是待排序的单列表,n是其长度,函数heap_sort()返回排序后的结果。注意,在实际使用中,我们可能需要自定义比较函数来按照优先级比较元素的大小。
阅读全文