网站首页 网站地图
网站首页 > 娱乐人生 > 算法稳定性怎么编程

算法稳定性怎么编程

时间:2026-03-18 04:55:58

算法稳定性是指排序算法在排序过程中,具有相同关键字的记录相对次序不会发生改变的特性。如果一个排序算法是稳定的,那么对于任意两个记录 ri 和 rj,如果它们在原序列中满足 ri < rj,则在排序后的序列中 ri 仍然小于 rj。

冒泡排序(Bubble Sort)

稳定性:稳定

实现

```c

void bubble_sort(int arr[], int n) {

for (int i = 0; i < n - 1; i++) {

for (int j = 0; j < n - i - 1; j++) {

if (arr[j] > arr[j + 1]) {

// 交换 arr[j] 和 arr[j + 1]

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

}

```

选择排序(Selection Sort)

稳定性:不稳定

实现

```c

void selection_sort(int arr[], int n) {

for (int i = 0; i < n - 1; i++) {

int min_idx = i;

for (int j = i + 1; j < n; j++) {

if (arr[j] < arr[min_idx]) {

min_idx = j;

}

}

// 交换 arr[i] 和 arr[min_idx]

int temp = arr[i];

arr[i] = arr[min_idx];

arr[min_idx] = temp;

}

}

```

插入排序(Insertion Sort)

稳定性:稳定

实现

```c

void insertion_sort(int arr[], int n) {

for (int i = 1; i < n; i++) {

int key = arr[i];

int j = i - 1;

while (j >= 0 && arr[j] > key) {

arr[j + 1] = arr[j];

j = j - 1;

}

arr[j + 1] = key;

}

}

```

归并排序(Merge Sort)

稳定性:稳定

实现

```c

void merge_sort(int arr[], int left, int right) {

if (left < right) {

int mid = left + (right - left) / 2;

merge_sort(arr, left, mid);

merge_sort(arr, mid + 1, right);

merge(arr, left, mid, right);

}

}

void merge(int arr[], int left, int mid, int right) {

int n1 = mid - left + 1;

int n2 = right - mid;

int L[n1], R[n2];

for (int i = 0; i < n1; i++)

L[i] = arr[left + i];

for (int j = 0; j < n2; j++)

R[j] = arr[mid + 1 + j];

int i = 0, j = 0, k = left;

while (i < n1 && j < n2) {

if (L[i] <= R[j]) {

arr[k] = L[i];

i++;

} else {

arr[k] = R[j];

j++;

}

k++;

}

while (i < n1) {

arr[k] = L[i];

i++;

k++;

}

while (j < n2) {

arr[k] = R[j];

j++;

k++;

}

}

```

快速排序(Quick Sort)

稳定性:不稳定

实现