复制
收藏
提问
简洁

L.r[high]=L.r[low]; } L.r[low]=L.r[0]; return low; } void QSort(SqList &L,int low,int high) { int pivotloc; if(low<high) { pivotloc=Partition(L,low,high); QSort(L,low,pivotloc-1); QSort(L,pivotloc+1,high); } } void QuickSort(SqList &L) { QSort(L,1,L.length); } void Create_Sq(SqList &L) { int i,n; printf("请输入数据个数,不超过%d个\n",MAXSIZE); scanf("%d",&n); printf("请输入待排序的数据:\n"); while(n>MAXSIZE) { printf("个数超过上限,不能超过%d,请重新输入\n",MAXSIZE); scanf("%d",&n); } for(i=1;i<=n;i++) { scanf("%d",&L.r[i].key); L.length++; } } void show(SqList L) { int i; for(i=1;i<=L.length;i++) printf("%d ",L.r[i].key); printf("\n"); } int main() { SqList L; L.r=(ElemType*) malloc(sizeof(ElemType)*(MAXSIZE+1)); L.length=0; Create_Sq(L); InsertSort(L); printf("直接插入排序后的结果为:\n"); show(L); L.length=0; Create_Sq(L); BInsertSort(L); printf("折半插入排序后的结果为:\n"); show(L); printf("希尔排序:\n"); L.length=0; Create_Sq(L); int i,t; int *dt=(int*) malloc(sizeof(int)*MAXSIZE); printf("请输入增量个数:\n"); scanf("%d",&t); for(i=0;i<t;i++) { printf("第%d个增量:\n",i+1); scanf("%d",&dt[i]); } ShellSort(L,dt,t); printf("希尔排序后的结果为:\n"); show(L); L.length=0; Create_Sq(L); BubbleSort(L); printf("冒泡排序后的结果为:\n"); show(L); L.length=0; Create_Sq(L); QuickSort(L); printf("快速排序后的结果为:\n"); show(L); }

4月前
全网
文档
学术
百科
知识库
时间不限
自动
回答简洁模式
深入研究一些

快速排序是一种高效的排序算法,它使用分治法策略来对数组进行排序。以下是使用C语言实现快速排序算法的步骤:

  1. 选择基准值:从数列中挑出一个元素,称为“基准”(pivot)。4
  2. 分区操作:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准的后面。在这个分区退出之后,该基准就处于数列的中间位置。4
  3. 递归排序:递归地(recursive)把小于基准的子数列和大于基准的子数列排序。4

下面是一个简单的C语言实现快速排序的示例代码:

#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[high]; // 选择最右侧元素作为基准
    int i = (low - 1);     // i指针用于记录小于基准的元素的最右位置

    for (int j = low; j <= high - 1; j++) {
        // 如果当前元素小于或等于基准
        if (arr[j] <= pivot) {
            i++; // i指针右移
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i + 1], &arr[high]);
    return (i + 1);
}

// 快速排序的递归函数
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        // 分区索引
        int pi = partition(arr, low, high);

        // 分别对左右分区进行快速排序
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 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[] = {10, 7, 8, 9, 1, 5};
    int n = sizeof(arr) / sizeof(arr[0]);
    quickSort(arr, 0, n - 1);
    printf("Sorted array: \n");
    printArray(arr, n);
    return 0;
}

在这段代码中,swap函数用于交换两个元素的值,partition函数用于根据基准值对数组进行分区,quickSort函数是快速排序的主要递归函数,它将数组分为两部分并递归地对它们进行排序。printArray函数用于打印排序后的数组。main函数中定义了一个数组并调用了快速排序函数。7

你觉得结果怎么样?
快速排序算法的C语言实现
快速排序与归并排序的比较
C语言实现排序算法的效率分析
快速排序算法的时间复杂度
快速排序算法的稳定性
如何在C语言中实现归并排序算法

以上内容由AI搜集生成,仅供参考

在线客服