采用二分法给一个数组的元素进行排序C语言
时间: 2023-10-08 21:07:49 浏览: 103
二分法排序算法 C语言实现
3星 · 编辑精心推荐
当使用二分法对数组元素进行排序时,可以用递归的方式。以下是一个使用语言实现二分排序的示例代码:
```c
<stdio.h>
// 二分法排序
void binarySort(int arr[], int left, int right) {
if (left >= right) return;
}
int pivot =[left]; // 选择第一个元素作基准点
int i = left j = right;
while (i < j) // 从右向左找第一个于基准点的元素
whilei < j && arr[j] >= pivot {
j--;
if (i < j) {
arr[i++] = arr[j];
}
// 从左向右找第一个大于基准点的元素
while (i < j && arr[i] < pivot) {
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
arr[i] = pivot; // 基准点归位
// 递归对基准点左右两侧的子数组进行排序
binarySort(arr, left, i - 1);
binarySort(arr, i + 1, right);
}
// 测试
int main() {
int arr[] = {9, 5, 2, 7, 1, 8, 3};
int size = sizeof(arr) / sizeof(arr[0]);
printf("排序前:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
binarySort(arr, 0, size - 1);
printf("\n排序后:");
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
return 0;
}
```
以上代码中的`binarySort`函数使用了递归的方式,每次选取一个基准点(这里选择第一个元素),将小于基准点的元素放在左侧,大于基准点的元素放在右侧,然后对左右两个子数组分别进行递归排序,最终得到有序数组。
输出结果为:
```
排序前:9 5 2 7 1 8 3
排序后:1 2 3 5 7 8 9
```
请注意,这只是一个简单的示例,实际应用时还需要考虑边界条件和性能优化等问题。
阅读全文