写快排 总结的问题
来源:互联网 发布:怎样在淘宝兼职 编辑:程序博客网 时间:2024/06/05 07:50
#include <stdio.h>/*成功!*/void main(){ int i=0; int group(int a[],int start,int end); void quickSort(int a[],int start,int end); int a[]= {1,8,1,8,1,0}; quickSort(a,0,5); for(;i<=5;i++){ printf("%d",a[i]); } }
/*
这次写的算法是快速排序
快排,不单单是代码简单
而却平均效率也是不错的,是一个蛮通用的排序
*/
/*
快排的主要特点是分组:
通过像是二叉树样的分组下去
知道分到只是剩下一个数
有点像归并也是就地排序
*/
/*
因为是分组 那么核心就是分组 哦
因为是就地排序 所有是不变的一个数组 a[]
然后是需要以哪个数组小标做分组的起始 start
*/
/*
犯下的严重错误:
anping=anping^dandan;
dandan=anping^dandan;
anping=anping^dandan;
这是一个相当快的交换值的算法,我屁颠屁颠的用在了这里
但是不曾想,当i和j指向的是同一个下标的时候,交换来的值却都是0。
切记!
*/
int group(int a[],int start,int end){ int temp; int i=start-1; //i的值是用来记录当前 大值的最后位置 int j=start; //来遍历数组 for(;j<end;j++){ if(a[j]<=a[end]){ //如果小于的话可以交换 与大值位置交换 以便在小值部分区域 i++; temp=a[j]; a[j]=a[i]; a[i]=temp; } } temp=a[i+1] ; a[i+1]=a[end] ; a[end]=temp; return i+1;}
/*
快排
输入为待排序数组 和起始
*/
/*
犯下的错误:
我以为是c语言不熟悉了,但是不是 而是我在这里怎么都想不起怎么调用了
我犯了一个重大的错误就是把 快排的递归调用当做了 归并
归并是细化之后再排的 所有应该是最后调用排序的核心,
而这里应该是先调用核心排序之后再去 细化的! 充分暴露了我的递归太烂了.
*/
void quickSort(int a[],int start,int end){ /*初始位置小于结束位置*/ if(start<end){ int pos= group(a,start,end); quickSort(a,start,pos-1); //注意这个 quickSort(a,pos+1,end); //注意这个pos+1 }else{ return; //这是终点 但是要不要无所谓的! } }
- 写快排 总结的问题
- 数据库连接问题的总结
- IBatisNet的问题总结
- 一些问题的总结
- CCNA的问题总结
- CSS问题的总结
- free的问题总结
- 今天的问题总结
- 代码问题的总结
- TCP的问题总结
- gridview 的问题总结
- 遇到的问题总结
- JavaScript的问题总结
- 总结sizeof 的问题
- 问题的总结
- kSum问题的总结
- 一段时间的问题总结
- 零零碎碎的问题总结
- Python Exercise #18
- TQ2440裸机MMU
- 如何快速是DNS修改生效
- strings和nm命令
- Linux系统性能检测
- 写快排 总结的问题
- 数据库性能优化--地址搜索
- sqlmap 在unbuntu下的安装
- ubutu12.04 编译android问题
- Apache性能监控
- LoadRunner脚本编写之一
- ubuntu 安装snmp
- LoadRunner脚本编写之二
- Visual Studio 2012 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案