排序算法 之 (快速排序)
10.3、快速排序
算法思想
在待排序表[1...n]中任取一个元素pivot作为枢轴(基准,通常去首元素),通过一趟排序将待排序表划分为独立的两部分L[1...k-1]和L[k+1...n],使得L[1...k-1]中所有元素小于pivot,L[k+1...n]中所有元素都大于等于pivot,则pivot放在最终位置L(k)上,这个过程称为一次划分。然后分别递归地对两个子表重复上述过程,直到每部分内只有一个元素或者空为止,即所有元素放到其最终位置上。
注意:快排是不稳定的
算法思想图解
快速排序代码实现
#include <stdio.h> #include <stdlib.h> #define boolean int #define false 0; #define true 1; //快速排序:nums:待排序数组;low:表示低指针;high:表高指针;返回排序后的枢轴位置 int partition(int nums[],int low,int high){ int privot = nums[low];//第一个元素为枢轴 while(low < high){ while(low < high && nums[high] >= privot) high--; nums[low] = nums[high];//比枢轴小的元素移动到左端 while(low < high && nums[low] <= privot) low++; nums[high] = nums[low];//比枢轴大的元素移动到右端 } nums[low] = privot;//把枢轴方法最终的位置 return low;//返回枢轴位置 } void QuickSort(int nums[],int low,int high){ if(low < high){ int pivotpos = partition(nums,low,high); QuickSort(nums,low,pivotpos-1); QuickSort(nums,pivotpos+1,high); } } int main(){ int nums[] = {49,38,65,97,76,13,27,49}; int length = 8; printf("快速排序前:"); for(int i = 0; i < length ;i++){ printf("%d ",nums[i]); } QuickSort(nums,0,length-1); printf("\n"); printf("快速排序后:"); for(int i = 0; i < length ;i++){ printf("%d ",nums[i]); } return 0; } //结果: 快速排序前:49 38 65 97 76 13 27 49 快速排序后:13 27 38 49 49 65 76 97
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!