几种选择排序代码C语言
时间: 2024-06-30 13:00:15 浏览: 6
选择排序是一种简单直观的排序算法,它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。下面是几种选择排序的C语言实现:
**1. 基本选择排序(升序):**
```c
void selectionSort(int arr[], int n) {
int i, j, min_idx;
for (i = 0; i < n-1; i++) {
min_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] < arr[min_idx])
min_idx = j;
// 将找到的最小值与当前元素交换
if (min_idx != i)
swap(&arr[min_idx], &arr[i]);
}
}
```
**2. 选择排序(降序):**
```c
void selectionSortDesc(int arr[], int n) {
int i, j, max_idx;
for (i = 0; i < n-1; i++) {
max_idx = i;
for (j = i+1; j < n; j++)
if (arr[j] > arr[max_idx])
max_idx = j;
// 将找到的最大值与当前元素交换
if (max_idx != i)
swap(&arr[max_idx], &arr[i]);
}
}
```
**3. 优化版选择排序(仅在数组近乎有序的情况下):**
```c
// 注意:这里使用了假设数组几乎有序的假设,实际应用中可能不太常见
void optimizedSelectionSort(int arr[], int n) {
int i, j, min_idx;
bool swapped;
for (i = 0; i < n; i++) {
min_idx = i;
swapped = false;
for (j = i+1; j < n; j++) {
if (arr[j] < arr[min_idx]) {
min_idx = j;
swapped = true;
}
}
// 如果没有发生交换,说明已经排序完成,无需再交换
if (!swapped)
break;
swap(&arr[min_idx], &arr[i]);
}
}
```
**