首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

用C对数组进行排序(小元素在边缘,大元素在中间)

要用C语言对数组进行排序,可以使用一种基于比较的排序算法,如快速排序或归并排序。以下是一个示例代码,实现了将小元素放在数组边缘,大元素放在中间的排序效果:

代码语言:txt
复制
#include <stdio.h>

// 交换两个元素的值
void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

// 快速排序的分区函数
int partition(int arr[], int low, int high) {
    int pivot = arr[low];
    int i = low, j = high + 1;

    while (1) {
        // 从左向右找到第一个大于等于pivot的元素
        while (arr[++i] < pivot) {
            if (i == high) break;
        }

        // 从右向左找到第一个小于等于pivot的元素
        while (arr[--j] > pivot) {
            if (j == low) break;
        }

        // 如果i和j相遇,则退出循环
        if (i >= j) break;

        // 交换i和j对应的元素
        swap(&arr[i], &arr[j]);
    }

    // 将pivot放到正确的位置
    swap(&arr[low], &arr[j]);

    // 返回pivot的位置
    return j;
}

// 快速排序
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        // 划分数组,并获取pivot的位置
        int pivotIndex = partition(arr, low, high);

        // 分别对左右子数组进行快速排序
        quickSort(arr, low, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, high);
    }
}

// 打印数组
void printArray(int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

int main() {
    int arr[] = {4, 2, 6, 8, 1, 9, 3, 5, 7};
    int size = sizeof(arr) / sizeof(arr[0]);

    printf("原始数组: ");
    printArray(arr, size);

    // 使用快速排序对数组进行排序
    quickSort(arr, 0, size - 1);

    printf("排序后的数组: ");
    printArray(arr, size);

    return 0;
}

这段代码使用了快速排序算法对数组进行排序。快速排序是一种常用的排序算法,其时间复杂度为O(nlogn),是一种高效的排序算法。在快速排序的实现中,通过选择一个基准元素,将数组划分为两个子数组,然后对子数组进行递归排序。通过不断地划分和排序,最终实现整个数组的排序。

对于本题要求的将小元素放在边缘,大元素放在中间的排序效果,可以通过选择一个合适的基准元素,使得在划分数组时,小于等于基准元素的元素被放在一侧,大于基准元素的元素被放在另一侧。这样,最终排序结果就可以达到题目要求的效果。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器CVM:腾讯云提供的弹性计算服务,可用于部署和运行各类应用。
  • 弹性容器实例TKE:腾讯云提供的容器化部署和管理服务,便于快速构建和扩展应用。
  • 对象存储COS:腾讯云提供的安全可靠的对象存储服务,适用于存储和管理大规模的非结构化数据。

注意:由于要求不提及特定的云计算品牌商,上述链接仅为腾讯云相关产品的示例,实际使用时请根据需求选择合适的云计算产品。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

没有搜到相关的合辑

领券