快速排序优化版
来源:互联网 发布:淘宝领卷公众号 编辑:程序博客网 时间:2024/05/16 14:54
在本改进算法中,只对长度大于k的子序列递归调用快速排序,让原序列基本有序,然后再对整个基本有序序列用插入排序算法排序。实践证明,改进后的算法时间复杂度有所降低,且当k取值为 8 左右时,改进算法的性能最佳。算法思想如下:
参考:http://blog.csdn.net/hguisu/article/details/7776068
#include <stdio.h>#include <stdlib.h>void InsertSort(int arr[],int len);void quickSort(int arr[],int len);void quickSort_imp(int arr[],int start,int end);int patition(int arr[],int start,int end);void printArr(int arr[],int len);void swap(int *a,int *b);int main(){ int arr[]={2,5,1,3,7,8}; int len = sizeof(arr)/sizeof(int); printArr(arr,len); InsertSort(arr,len); printArr(arr,len); return 0;}void quickSort(int arr[],int len){ quickSort_imp(arr,0,len-1); InsertSort(arr,len);}int patition(int arr[],int start,int end){ int privotKey = arr[start]; while(start<end){ while(start<end&&arr[end]>=privotKey){ end--; } if(start<end){ swap(&arr[start],&arr[end]); } while(start<end&&arr[start]<=privotKey){ start++; } if(start<end){ swap(&arr[start],&arr[end]); } } arr[start]= privotKey;}void quickSort_imp(int arr[],int start,int end){ if(end-start>8){ int pivot = patition(arr,start,end); quickSort_imp(arr,start,pivot-1); quickSort_imp(arr,pivot+1,end); }}void printArr(int arr[],int len){ for(int i=0;i<len;i++) printf("%d ",arr[i]); printf("\n");}void swap(int *a,int *b){ int t = *a; *b=*a; *a = t;}void InsertSort(int arr[],int len){ for(int i=1;i<len;i++){ int tmp = arr[i]; int index =i; while(index-1>=0&&tmp<arr[index-1]){ arr[index]=arr[index-1]; index--; } arr[index]=tmp; }}
阅读全文
0 0
- 快速排序(优化版)
- 快速排序优化版
- java 快速排序优化版
- java 快速排序优化版
- 快速排序及优化(Java版)
- 快速排序及其优化
- 快速排序及优化
- 快速排序及其优化
- 优化 快速排序
- 快速排序及优化
- 快速排序的优化
- 快速排序的优化
- 快速排序<优化>
- 随机优化快速排序
- 快速排序优化
- 优化的快速排序
- 快速排序及优化
- 快速排序优化
- 图解JavaScript的参数传递
- 基于casperjs、resemble.js实现一个像素对比服务
- JavaScript中奇特的~运算符
- logstash多个mysql的input导出到多个output
- 基于node实现文件路径替换
- 快速排序优化版
- bzoj 4898: [Apio2017]商旅
- Beyond Compare
- C++继承基础
- WebService入门实例教程(亲测)
- angularJS中利用promise,$q进行ajax数据定向缓存
- 求助北京理工大学BIT-Vehicle Dataset数据集
- 课后作业之学生类
- 类 小组成员