动手敲算法——快速排序
来源:互联网 发布:外汇编程自动交易 编辑:程序博客网 时间:2024/05/18 18:20
#include <stdio.h>void swap(int *x,int *y) //交换两个数 { *x = *x + *y - (*y = *x); //不用参数实现两个数交换 // int teleftp;// teleftp = *x;// *x = *y;// *y = teleftp;}int midian3(int *a,int left,int right) //三中值分割法{ int mid = (left + right) / 2; if(a[left] <= a[mid]) { swap(&a[left],&a[mid]); } if(a[mid] <= a[right]) { swap(&a[mid],&a[right]); } if(a[left] <= a[mid]) { swap(&a[left],&a[mid]); } return a[mid];} #if 1void quicksort(int * a,int left,int right){ int i = left+1,j = right; //a[left]存放枢纽元,哨兵i从left+1开始移动 int mid; int key; if(left < right) { mid = (left + right) / 2; key = midian3(a,left,right); swap(&a[left],&a[mid]); //将枢纽元放到最左 while(i <= j) { while((i <= right) && (a[i] <= key)) //哨兵i左移 ,当遇到大于枢纽元的数则停下 { i++; } while((j >= left) && (a[j] > key)) //哨兵j右移 ,当遇到小于枢纽元的数则停下 { j--; } if(i < j) // 交换两个数 { swap(&a[i],&a[j]); } } //当i,j哨兵相遇,则停止 swap(&a[left],&a[j]); //将枢纽元和哨兵停止的单元交换,即将中间元素插入中中间位置 quicksort(a,left,j-1); //分治,递归 quicksort(a,j+1,right); } }#endif//测试 int main(void){ int a[10] = {2,2,23,666,0,9,4,7,34,12}; int i; for(i=0;i<10;i++) { printf(" %d ",a[i]); } quicksort(a,0,9); printf("\n"); for(i=0;i<10;i++) { printf(" %d ",a[i]); }}
0 0
- 动手敲算法——快速排序
- 动手敲算法——归并排序
- 动手实现 算法 之 “快速排序”
- 动手敲算法——前言
- 【动手写排序】快速排序
- 排序算法动手研究
- 排序算法—快速排序
- 排序算法—快速排序
- 【算法】——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法导论—快速排序
- 由里至外解析System Center
- 12章上机练习1
- CSS3之变换Transform
- Flask Web 开发 博客文章_3
- 我的shiro之旅: 十八 例子源码
- 动手敲算法——快速排序
- Python中的迭代器iterator和yield生成器(constructor)
- Java Synchronized详解
- Spring中@Autowired注解,@Resource注解和xml default-autowire区别
- web三种跨域请求数据方法
- cookie session 区别
- CodeBlocks Code Template
- Oracle Linux 7.1 静默安装数据库软件时报错
- iOS8 WebKit库之——WKWebView篇