H面试程序(14): 快速排序法
来源:互联网 发布:c语言从1加到100 编辑:程序博客网 时间:2024/06/05 03:17
本文代码借鉴了http://blog.csdn.net/fduan/article/details/7914331
但也做了一些小的优化,就是在选择枢纽元的时候,采用了三数取中法,避免取到最大或最小的数作为枢纽元,在待排数比较多的情况下能有效减少排序的时间
#include <stdio.h>#include <time.h>void swap(int *a, int *b){int temp;temp = *a;*a = *b;*b = temp;}void disp_array( int a[], int n ){ int i; for( i = 0; i < n; ++i ) printf( "%d ", a[i] ); printf( "\n" );}int partition( int a[], int low, int high ){ int m = low + (high - low) / 2; //采用三数取中的方法,尽量避免枢纽元素是最大数或最小数if(a[low] >a[high])swap(&(a[low]),&(a[high]));if(a[m] > a[high])swap(&(a[m]), &(a[high])); if(a[m] > a[low])swap(&(a[m]), &(a[low])); int piv_val = a[low]; while( low < high ) { while( low < high && a[high] >= piv_val ) --high; a[low] = a[high]; while( low < high && a[low] <= piv_val ) ++low; a[high] = a[low]; } a[low] = piv_val; return low;}void qsort_recur( int a[], int low, int high ){ int idx_piv; if( low < high ) { idx_piv = partition( a, low, high ); qsort_recur( a, low, idx_piv - 1 ); qsort_recur( a, idx_piv + 1, high ); }}void quick_sort( int a[], int n ){ qsort_recur( a, 0, n - 1 );}int main(){ clock_t start, finish;start = clock(); int a[] = { 10,9,8,7,6,5,4,3,2,1}; int n = sizeof(a)/sizeof(int); printf( "Before sorting: " ); disp_array( a, n ); quick_sort( a, n ); printf( "After sorting: " ); disp_array( a, n ); finish = clock(); printf("\n本次计算一共耗时: %f秒\n\n", (double)(finish-start)/CLOCKS_PER_SEC); return 0;}
- H面试程序(14): 快速排序法
- H面试程序(15): 冒泡排序法
- H面试程序(17): 堆排序
- H面试程序(18): 归并排序
- H面试程序(16): 简单选择排序
- 快速排序法程序
- H面试(20): 排序总结
- H面试程序(2)josephus 问题
- H面试程序(27):字串转换
- 快速排序,面试必备
- 面试必备-快速排序
- 面试 快速排序
- 快速排序Quicksort(附快速排序程序)
- 面试--算法排序(7)(快速排序)
- H面试程序(9): 左旋字符串
- H面试程序(10): 字符串包含问题
- H面试程序(5):两个大数相乘
- H面试程序(28):字符串处理转换
- oracle基本文件之控制文件
- 李显龙在2013年新加坡国庆大会上的中文演讲
- linux下sort程序简介
- 使用CSS3 Flexbox布局
- uva 10131
- H面试程序(14): 快速排序法
- 金融信息交换协议:Fix协议(一)
- C++用CreateProcess来打开IE
- 将STM32的标准库编译成lib【图文】
- HDU 2546 饭卡 (0/1背包问题)
- Lecture 7 自定义类型
- Linux 中make install安装的软件卸载
- Extjs 4.x 中ComboBox级联问题
- java中break,continue和return的区别