在Dev C++中用C语言分别实现冒泡、选择、基数和归并排序,输入任意10个数后,能够按从大到小排序输出。
时间: 2024-12-08 13:16:17 浏览: 22
C语言期末大作业之图书信息管理系统实现-基于Dev-C++实现.zip
在 Dev C++ 中,我们可以分别用C语言实现冒泡排序、选择排序、基数排序和归并排序。以下是四个排序算法的基本实现:
1. **冒泡排序** (Bubble Sort):
```c
#include <stdio.h>
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]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main() {
int arr[] = {5, 2, 8, 1, 9, 6, 3, 7, 4};
int n = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr, n);
printf("Sorted array in descending order: ");
for (int i = 0; i < n; ++i)
printf("%d ", arr[i]);
return 0;
}
```
2. **选择排序** (Selection Sort):
```c
#include <stdio.h>
void selection_sort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) {
int max_idx = i;
for (int j = i + 1; j < n; ++j)
if (arr[j] > arr[max_idx])
max_idx = j;
int temp = arr[i];
arr[i] = arr[max_idx];
arr[max_idx] = temp;
}
}
// 使用方法同上
```
3. **基数排序** (Radix Sort - 对整数数组有效,这里简化示例):
```c
#include <stdio.h>
#include <string.h>
void counting_sort(int arr[], int exp) {
int output[n], i;
memset(output, 0, sizeof(output));
for (i = 0; i < n; i++)
output[(arr[i] / exp) % 10]++;
// 将计数结果存入output数组
for (i = 1; i < 10; i++)
output[i] += output[i - 1];
// 将待排序数组元素放入输出数组
for (i = n - 1; i >= 0; i--) {
output[(arr[i] / exp) % 10]--;
output[(arr[i] / exp) % 10] += arr[i]; // 移动数字到正确位置
}
// 将output数组内容复制回原数组
for (i = 0; i < n; i++)
arr[i] = output[i];
}
void radix_sort(int arr[], int n) {
int m = INT_MAX, digit_position = 1;
while (m /= 10)
digit_position++;
for (int exp = 1; exp <= digit_position; exp *= 10)
counting_sort(arr, exp);
}
// 使用方法同上
```
4. **归并排序** (Merge Sort):
```c
#include <stdio.h>
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
int L[n1], R[n2];
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1+ j];
i = 0;
j = 0;
k = l;
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++;
}
}
void mergeSort(int arr[], int l, int r) {
if (l < r) {
int m = l+(r-l)/2;
mergeSort(arr, l, m);
mergeSort(arr, m+1, r);
merge(arr, l, m, r);
}
}
// 使用方法同上
阅读全文