c语言一维数组分两组排序
时间: 2023-08-19 09:36:05 浏览: 109
可以使用快速排序算法对一维数组进行排序,然后将数组分成两组。具体实现方法为:
1. 选择数组中的一个元素作为枢轴(pivot)。
2. 遍历数组,将小于枢轴的元素放在左边,大于枢轴的元素放在右边。
3. 递归地对左右两个子数组进行快速排序。
4. 将左右两个子数组合并起来。
代码实现如下:
```c
void quick_sort(int arr[], int left, int right) {
if (left < right) {
int pivot = arr[left];
int i = left, j = right;
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);
}
}
void split_array(int arr[], int len, int mid, int left[], int right[]) {
int i;
for (i = 0; i < mid; i++) {
left[i] = arr[i];
}
for (i = mid; i < len; i++) {
right[i - mid] = arr[i];
}
}
void merge_array(int arr[], int left[], int left_len, int right[], int right_len) {
int i = 0, j = 0, k = 0;
while (i < left_len && j < right_len) {
if (left[i] < right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
while (i < left_len) {
arr[k++] = left[i++];
}
while (j < right_len) {
arr[k++] = right[j++];
}
}
void sort_and_split(int arr[], int len, int mid, int left[], int right[]) {
quick_sort(arr, 0, len - 1);
split_array(arr, len, mid, left, right);
}
int main() {
int arr[] = {3, 5, 1, 7, 9, 2, 6, 4};
int len = sizeof(arr) / sizeof(int);
int mid = len / 2;
int left[mid];
int right[len - mid];
sort_and_split(arr, len, mid, left, right);
printf("Left array: ");
for (int i = 0; i < mid; i++) {
printf("%d ", left[i]);
}
printf("\nRight array: ");
for (int i = 0; i < len - mid; i++) {
printf("%d ", right[i]);
}
printf("\n");
return 0;
}
```
这段代码将数组按照从小到大的顺序排序,并将它分成两个数组。可以根据需要修改代码,例如将数组按照从大到小的顺序排序,或者将数组分成三个或更多组等。
阅读全文