排序
来源:互联网 发布:sql server 大数据 编辑:程序博客网 时间:2024/05/24 07:14
讲座好无聊,来写总结
插入排序:
基础思想就是:我和左边的比,如果比左边的小,就继续向左,直至0或者找到大的,在这个比较的过程中不断的后移,找到后把原来的被比较数放到这一位;
支持:这个过程得从第一位(逻辑上第二位)开始,这样才支持一下代码
/**插入排序法*/void insertsort(int array[],int n){ for(int i=1;i<n;i++) { if(array[i-1]>array[i]) { int temp=array[i]; int j=i; while(j>0&&array[j-1]>temp) { array[j]=array[j-1]; j--; } array[j]=temp; } }}
快速排序法:
基础思想:二分法
随便取一个key,是数组中的随便的值(a[0]或者a[middle])都行
然后取最左边l,最右r,开始比较(l++,r–,交换)
大体的思想就是要将原始数组分成两边,左边的比右边大之类的
直至l>r
然后开始从(left,r)到(l,right)的比较
/**快速排序法具体实现*/ void quicksort(int array[],int left,int right){ int l=left; int r=right; int x,temp;// x=array[(left+right)/2]; x=array[left];//这样也可以 while(l<r) { while(array[l]<x&&l<right) { l++; } while(array[r]>x&&r>left) { r--; } if(l<=r) { temp=array[l]; array[l]=array[r]; array[r]=temp; l++; r--; } } cout<<"l=="<<l<<";r=="<<r<<endl; if(r>left) { quicksort(array,left,r); } if(l<right) { quicksort(array,l,right); } }
这里主要是
while(l<r) { while(array[l]<x&&l<right) { l++; } while(array[r]>x&&r>left) { r--; } if(l<=r) { temp=array[l]; array[l]=array[r]; array[r]=temp; l++; r--; } }
这一段比较难以理解,这里相对比较抽象,他的比较并不一定是对称的,所以一开始就理解成不对称的比较好。就是随便将原始代码分成两组,左边的都比右边的大,直至坐标l>r,再重复这个过程在各自的领域。
说的再多不如自己理解,感谢这个讲座,这个算是牛皮鲜的问题,感觉很简单
0 0
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 排序
- 常用图像特征提取方法分类
- iOS开发系列—Objective-C之Foundation框架
- AngularJS内置指令
- iOS开发系列--IOS程序开发概览
- win 无线热点setup
- 排序
- 动态规划方法
- iOS开发系列--Quartz 2D绘制2D图形和Core Image中强大的滤镜功能
- HDU 5430 Reflect 欧拉函数
- 【Linux】LD_PRELOAD用法
- iOS开发系列--Quartz 2D绘制2D图形和Core Image中强大的滤镜功能
- LUA的堆栈设置?未完。。。以后再写
- Android开发中所遇问题集锦
- iOS开发系列--动画