算法代码实现之三向切分快速排序,C/C++实现
来源:互联网 发布:linux 设置语言为英文 编辑:程序博客网 时间:2024/05/29 13:29
封装成函数:
//交换数组元素void swap(int *a,int i,int j){ int t = a[i]; a[i] = a[j]; a[j] = t;}//在lt之前的(lo~lt-1)都小于中间值//在gt之前的(gt+1~hi)都大于中间值//在lt~i-1的都等于中间值//在i~gt的都还不确定(最终i会大于gt,即不确定的将不复存在)void sort(int *a,int lo,int hi){ int v,lt,i,gt; if(lo>=hi) { return; } v = a[lo]; lt = lo; i = lo+1; gt = hi; while(i<=gt) { if(a[i]<v) { swap(a,i++,lt++); } else if(a[i]>v) { swap(a,i,gt--); } else { i++; } } sort(a,lo,lt-1); sort(a,gt+1,hi);}//三向切分快速排序//适合重复元素较多的排序算法void three_way_quick_sort(int *a,int len){ sort(a,0,len-1);}
测试:
#include <stdio.h>//打印输出数组void print_arr(int *a,int len){ int i; if(len<1) //数组长度必须大于0 { printf("length greater than 0"); return; } //打印整个数组 printf("["); for(i=0; i<len-1; i++) { printf("%d ",a[i]); } printf("%d]\n",a[len-1]);}int main(){ int a[] = {9,0,6,5,8,2,1,7,4,3}; int len = sizeof(a)/sizeof(int); print_arr(a,len); three_way_quick_sort(a,len); print_arr(a,len); return 0;}
输出:
[9 0 6 5 8 2 1 7 4 3]
[0 1 2 3 4 5 6 7 8 9]
1 0
- 算法代码实现之三向切分快速排序,C/C++实现
- 算法代码实现之三向切分快速排序,Golang(Go语言)实现
- 算法代码实现之三向切分快速排序,Java实现
- [算法之排序]三向切分的快速排序算法(java实现)
- 快速排序-三向切分(java实现)
- 快速排序算法原理及实现(单轴快速排序、三向切分快速排序、双轴快速排序)
- 算法代码实现之快速排序,C/C++实现
- 快速排序之三向切分
- 三向切分快速排序
- 三向切分快速排序
- 快速排序算法(c#)实现
- 图示经典算法--三向切分的快速排序
- 【算法理解】—— 快速排序(三向切分)
- 排序算法之快速排序<Quick_Sort>及其C语言代码实现
- 常用排序算法之快速排序c及lua实现
- C语言的快速排序算法代码-递归实现
- 排序算法(C实现)--------- 快速排序
- 《算法》希尔排序、归并排序、快速排序、三向切分的快速排序
- Unrecognized Windows Sockets error: 0: JVM_Bind 异常解决办法
- Python学习笔记-HeadFirstPython 1
- 应用程序无法正常启动(oxc000007b):解决方案
- Learn Some Framework-4 Binder And ServerManager
- 笔记:We don’t need no bounding-boxes: Training object class detectors using only human verification
- 算法代码实现之三向切分快速排序,C/C++实现
- Activity介绍
- CodeForces 607 B. Zuma(区间DP)
- 最新版IntelliJ IDEA 15开发Java Maven项目
- web前端开发
- java中的几个循环的注意点
- 常用Linux命令
- Android 第二天重置版 技巧
- SSH进阶——Struts入门