改进的快速排序算法
来源:互联网 发布:拼立得mac版 编辑:程序博客网 时间:2024/05/22 02:28
快速排序算法的改进思路
1.选取好的基准,是两边的数据个数尽量的均匀
取数组的第一个,中间,最后一个数据,取三个数中第二大的数作为基准
2. 不递归
3.与插入结合,当段内的数组个数小于等于16的时候,使用插入排序
具体实现代码如下:
#include <stdio.h>#include <stdlib.h>#include <malloc.h>#include <time.h>/***********************************************改进的快速排序*1.取第一个和最后一个和中间元素进行排序,* 取排序好了的中间元素当基准元素*2.不递归*3.与插入结合***********************************************///给三个数进行排序并返回中间数据int getmid(int start, int mid, int end){int t;if(start > mid){t = start;start = mid;mid = t;}if(mid > end){t = mid;mid = end;end = t;}if(start > mid){t = mid;mid = start;start = t;}return mid;}/*****************主函数**********************/void main(){int n; //输入数组的长度printf("请输入数组的长度:\n");scanf("%d",&n);int *a = (int *)malloc(n*sizeof(int));//int a[10] = {0,94,25,29,3,45,1,35,28,99};int *b = (int *)malloc(n*sizeof(int)); //使用队列将程序改为非递归int head = 0; //队头int rear = 0; //队尾 srand(time(0));//初始化数组for(int i=0; i<n; i++){a[i] = rand()%100;}//输出排序前的数组printf("\n");printf("输出排序前的数组:\n");for(i=0; i<n; i++){printf("%d\t",a[i]);}//排序b[rear++]=0; //现将头放到队列中,再将尾放到队列中b[rear++]=n-1;while(head != rear){int start = b[head++];int end = b[head++];int mid = (start+end)/2;if(end-start <=16){//使用插入排序for(i=1; i<=end; i++){int temp=a[i];for(int j=i-1; j>=0; j--){if(a[j]>temp){a[j+1]=a[j];}else{break;}}a[j+1] = temp;}}else{//使用快速排序int front=start;int tail = end;int temp = getmid(a[front],a[mid],a[tail]);int t = temp;temp = a[start];a[start] = t;while(tail > front){while(a[tail]>temp && tail>front)tail--;if(tail>front){a[front++] = a[tail];}while(a[front]<temp && front<tail)front++;if(tail>front){a[tail--]=a[front];}}a[front] = temp;if(front-1 > start){b[rear++] = start;b[rear++] = front-1;}if(end > front+1){b[rear++] = front+1;b[rear++] = end;}}}//输出排序后的数组printf("\n");printf("输出排序后的数组:\n");for(i=0; i<n; i++){printf("%d\t",a[i]);}free(a);}
- 快速排序算法的改进
- 快速排序的改进算法
- 改进的快速排序算法
- 快速排序改进算法
- 快速排序的改进
- 快速排序的改进
- 快速排序的改进
- 改进的快速排序
- 舍伍德算法改进快速排序
- 冒泡排序的改进算法和快速排序
- 快速排序算法(冒泡算法的改进)
- 改进排序算法:快速排序(对冒泡排序的改进)
- 改进的双向快速冒泡排序算法-Java版
- 快速排序算法及其改进算法实现
- 改进的排序算法
- 快速排序的改进-随机快速排序
- 改进版本的快速排序
- 快速排序的层次改进
- Extjs3 在同一个表格中拖放记录
- <黑马程序员>setter方法和getter方法
- Dos中@符号的使用演示(屏蔽echo off的回显)
- 容器与继承
- 指定位置插入新字符串
- 改进的快速排序算法
- 预警卫星对弹道导弹关机点战术参数的估计
- 【创业感想】从如何让创业公司效率提高3倍说起
- Intent和PendingIntent的区别
- 网页设计之CSS3精要
- hadoop源码解读——Configured
- VC真彩工具栏制作浅析
- 1102
- 苹果已经关闭5.1.1的验证,如何升级到iOS5.1.1或平刷5.1.1