将n个整数用快速排序法排序C语言
时间: 2023-09-20 21:07:22 浏览: 139
用C语言实现快速排序
快速排序法是一种常用的排序算法,其基本思想是通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。
以下是将n个整数用快速排序法排序的C语言代码:
```c
#include <stdio.h>
void quick_sort(int arr[], int left, int right) {
int i, j, pivot, temp;
if (left < right) {
i = left;
j = right;
pivot = arr[left];
while (i < j) {
while (i < 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;
quick_sort(arr, left, i - 1);
quick_sort(arr, i + 1, right);
}
}
int main() {
int n, i;
printf("Enter the number of elements: ");
scanf("%d", &n);
int arr[n];
printf("Enter %d elements:\n", n);
for (i = 0; i < n; i++) {
scanf("%d", &arr[i]);
}
quick_sort(arr, 0, n - 1);
printf("Sorted array:\n");
for (i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
在上述代码中,`quick_sort()`函数实现了快速排序的核心算法,其中`arr[]`为待排序的数组,`left`和`right`分别为待排序部分的最左边和最右边的下标。首先取数组的第一个元素为枢轴元素`pivot`,然后将待排序部分分为两个子部分,左侧子部分的元素都小于等于枢轴元素,右侧子部分的元素都大于枢轴元素。重复以上步骤直到待排序部分的元素数量为1。最后,将所有子部分的元素合并即可得到排序后的数组。
在`main()`函数中,先读入待排序数组的元素个数`n`和元素值,然后调用`quick_sort()`函数进行排序,最后输出排序后的数组结果。
需要注意的是,在C语言中,数组的下标从0开始。因此,在`quick_sort()`函数中,对于待排序部分的最左边和最右边的下标,应该分别为0和n-1。
阅读全文