用c语言编写用起泡法,折半插入法,直接选择排序法对成绩分别由高到低和由低到高排序的代码
时间: 2024-02-25 08:58:17 浏览: 64
好的,下面是用C语言编写的三种排序算法的代码:
1. 冒泡排序法
```c
void bubble_sort(int arr[], int n, int flag) {
int i, j, temp;
for (i = 0; i < n - 1; i++) {
for (j = 0; j < n - 1 - i; j++) {
if (flag == 1) { // 从大到小排序
if (arr[j] < arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
} else { // 从小到大排序
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
}
```
2. 折半插入排序法
```c
void binary_insert_sort(int arr[], int n, int flag) {
int i, j, temp, low, high, mid;
for (i = 1; i < n; i++) {
temp = arr[i];
low = 0;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (flag == 1) { // 从大到小排序
if (arr[mid] < temp) {
high = mid - 1;
} else {
low = mid + 1;
}
} else { // 从小到大排序
if (arr[mid] > temp) {
high = mid - 1;
} else {
low = mid + 1;
}
}
}
for (j = i - 1; j >= low; j--) {
arr[j + 1] = arr[j];
}
arr[low] = temp;
}
}
```
3. 直接选择排序法
```c
void select_sort(int arr[], int n, int flag) {
int i, j, min, max, temp;
for (i = 0; i < n - 1; i++) {
min = i;
max = i;
for (j = i + 1; j < n; j++) {
if (flag == 1) { // 从大到小排序
if (arr[j] > arr[max]) {
max = j;
}
} else { // 从小到大排序
if (arr[j] < arr[min]) {
min = j;
}
}
}
if (flag == 1) { // 从大到小排序
if (max != i) {
temp = arr[i];
arr[i] = arr[max];
arr[max] = temp;
}
} else { // 从小到大排序
if (min != i) {
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
}
}
```
在主函数中,可以按照如下方式调用这些排序函数:
```c
int main() {
int arr[] = {90, 78, 85, 91, 67, 82, 68, 88, 72, 80};
int n = sizeof(arr) / sizeof(int);
int i;
printf("原始数据:\n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 由高到低排序
printf("冒泡排序(由高到低):\n");
bubble_sort(arr, n, 1);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("折半插入排序(由高到低):\n");
binary_insert_sort(arr, n, 1);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("直接选择排序(由高到低):\n");
select_sort(arr, n, 1);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
// 由低到高排序
printf("冒泡排序(由低到高):\n");
bubble_sort(arr, n, 0);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("折半插入排序(由低到高):\n");
binary_insert_sort(arr, n, 0);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
printf("直接选择排序(由低到高):\n");
select_sort(arr, n, 0);
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
阅读全文