复制
收藏
提问
简洁
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语言实现快速排序算法的步骤:
- 选择基准值:从数列中挑出一个元素,称为“基准”(pivot)。4
- 分区操作:重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的元素摆在基准的后面。在这个分区退出之后,该基准就处于数列的中间位置。4
- 递归排序:递归地(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
你觉得结果怎么样?