资讯详情

快速排序算法代码

📅 2026/10/29 2:09:58 | 华诺云谱 👁 阅读
快速排序算法代码
快速排序算法代码一、前言二、算法代码1、C语言基础版2、C语言栈模拟3、Java语言基础版4、Java语言栈模拟一、前言最近要用到快速排序的算法这里记录一下。二、算法代码1、C语言基础版#includestdio.h//打印数组元素voidprint_arr(intarr[],intn){for(inti0;in;i){printf(%d ,arr[i]);}putchar(\n);}//交换数组元素voidswap(intarr[],inti,intj){inttemparr[i];arr[i]arr[j];arr[j]temp;}//分区返回基准值最终索引基准选最右元素intpartition(intarr[],intlow,inthigh){intpivotarr[high];//基准值intilow-1;//小于基准区域右边界for(intjlow;jhigh;j){if(arr[j]pivot){//当前元素基准→加入左区域i;swap(arr,i,j);}}swap(arr,i1,high);//基准归位returni1;}//快速排序voidquick_sort(intarr[],intlow,inthigh,intn){print_arr(arr,n);if(lowhigh){intpipartition(arr,low,high);//分区索引quick_sort(arr,low,pi-1,n);//左子数组quick_sort(arr,pi1,high,n);//右子数组}}//入口函数intmain(){intarr[]{15,5,2,7,12,6,1,4,3,9,8,10};intlengthsizeof(arr)/sizeof(arr[0]);//计算数组长度quick_sort(arr,0,11,length);}2、C语言栈模拟#includestdio.h//定义栈的容量最大100#defineMAX_STACK100//打印数组元素voidprint_arr(intarr[],intn){for(inti0;in;i){printf(%d ,arr[i]);}putchar(\n);}//交换数组元素voidswap(intarr[],inti,intj){inttemparr[i];arr[i]arr[j];arr[j]temp;}//分区返回基准值最终索引基准选最右元素intpartition(intarr[],intlow,inthigh){intpivotarr[high];//基准值intilow-1;//小于基准区域右边界for(intjlow;jhigh;j){if(arr[j]pivot){//当前元素基准→加入左区域i;swap(arr,i,j);}}swap(arr,i1,high);//基准归位returni1;}voidquick_sort(intarr[],intleft,intright,intn){intstack[MAX_STACK];inttop-1;//栈空//初始区间入栈右先左后出栈顺序正确先入栈right再入栈leftstack[top]right;stack[top]left;while(top0){print_arr(arr,n);//取出一堆lr代表待排序[l,r]intlstack[top--];intrstack[top--];if(lr){//如果区间无效就跳过continue;}intpipartition(arr,l,r);//右子区间入栈if(pi1r){//区间元素至少2个才需要入栈排序减少无效任务stack[top]r;stack[top]pi1;}//左子区间入栈if(lpi-1){stack[top]pi-1;stack[top]l;}}}//入口函数intmain(){intarr[]{15,5,2,7,12,6,1,4,3,9,8,10};intlengthsizeof(arr)/sizeof(arr[0]);//计算数组长度quick_sort(arr,0,11,length);}3、Java语言基础版/** * 快速排序 * * author: gan * date: 2026-09-17 16:23 */publicclassQuickSort{privatestaticvoidprintArr(int[]arr,intn){for(inti0;in;i){System.out.printf(%d ,arr[i]);}System.out.println();}/** * 交换数组元素 * param arr 数组 * param i 待交换下标 * param j 待交换下标 */privatestaticvoidswap(int[]arr,inti,intj){inttemparr[i];arr[i]arr[j];arr[j]temp;}/** * 分区返回基准值最终索引基准选最右元素 * param arr 数组 * param low 开始下标 * param high 结束下标 * return */privatestaticintpartition(int[]arr,intlow,inthigh){intpivotarr[high];//基准值intilow-1;//小于基准区域右边界for(intjlow;jhigh;j){if(arr[j]pivot){//当前元素基准→加入左区域i;swap(arr,i,j);}}swap(arr,i1,high);//基准归位returni1;}/** * 递归快速排序 * param arr 数组 * param low 开始下标 * param high 结束下标 */privatestaticvoidquickSort(int[]arr,intlow,inthigh){printArr(arr,arr.length);if(lowhigh){intpipartition(arr,low,high);quickSort(arr,low,pi-1);quickSort(arr,pi1,high);}}/** * 快速排序 * param arr 数组 */publicstaticvoidquickSort(int[]arr){if(arrnull||arr.length1){return;}quickSort(arr,0,arr.length-1);}publicstaticvoidmain(String[]args){int[]arr{15,5,2,7,12,6,1,4,3,9,8,10};quickSort(arr);}}4、Java语言栈模拟importjava.util.ArrayDeque;importjava.util.Deque;/** * 快速排序 * * author: gan * date: 2026-09-17 16:23 */publicclassQuickSort{privatestaticvoidprintArr(int[]arr,intn){for(inti0;in;i){System.out.printf(%d ,arr[i]);}System.out.println();}/** * 交换数组下标 i 和 j 两个元素的值。 * param arr 数组 * param i 待交换元素下标 * param j 待交换元素下标 */privatestaticvoidswap(int[]arr,inti,intj){inttemparr[i];arr[i]arr[j];arr[j]temp;}/** * 分区返回基准值最终索引基准选最右元素 * * 这是快速排序的核心 * * param arr 数组 * param low 开始下标 * param high 结束下标 * return */privatestaticintpartition(int[]arr,intlow,inthigh){intpivotarr[high];//选取最右边元素作为基准值pivot轴值intilow-1;//i小于等于pivot区域的右边界//从low遍历到high - 1for(intjlow;jhigh;j){//如果当前元素小于等于pivot就放到左边区域if(arr[j]pivot){i;swap(arr,i,j);}}//循环结束后[low ~ i] 全部 pivot [i 1 ~ high - 1] pivot//把基准值放到中间正确位置swap(arr,i1,high);returni1;//返回基准值最终下标 pi}/** * 快速排序 * param arr 数组 */publicstaticvoidquickSort(int[]arr){if(arrnull||arr.length1){return;}DequeIntegerdequenewArrayDeque();//压栈将初始的左右边界入栈deque.push(0);deque.push(arr.length-1);while(!deque.isEmpty()){//注意压栈顺序前面是左后右出栈应该是先出right再出rightintrightdeque.pop();intleftdeque.pop();if(leftright){continue;//区间只有一个元素和者无效区间不用排序}intpipartition(arr,left,right);//右子区间入栈即 pi 1right 入栈if(pi1right){deque.push(pi1);deque.push(right);}//左子区间入栈left, pi - 1 入栈if(leftpi-1){deque.push(left);deque.push(pi-1);}printArr(arr,arr.length);}}publicstaticvoidmain(String[]args){int[]arr{15,5,2,7,12,6,1,4,3,9,8,10};quickSort(arr);}}
📝

华诺云谱内容团队

资深建站顾问 · 行业研究员

10年+企业数字化服务经验,专注智能建站、SEO优化与品牌营销,持续输出建站技巧、行业洞察与营销干货,已帮助5000+企业实现数字化增长。

你可能需要的服务

订阅华诺云谱资讯周报

每周一封,精选建站技巧、SEO与营销干货,直达邮箱。已有 8,000+ 企业主订阅,助你少走弯路。

↑