常用的几种排序算
来源:互联网 发布:最全p2p网络理财产品 编辑:程序博客网 时间:2024/06/05 08:57
最近看了一下,算法中的排序,整理了一下,加了点自己的理解,欢迎指教,话不多说,开始撸代码
1、冒泡排序:
冒泡排序,我理解的是,取出第一个(最后一个),依次和相邻后面(前面)的比较,升序为例,比后面的大就交换,否则继续循环,在这只写出核心的代码
//1、冒泡排序:public void pubbleSort(int[] list){ int tmp =0; for(int i = 0; i < list.length-1; i++){ for(int j = 0; j <list.length-1-i;j++){ if(list[j] >list[j+1]){ tmp =list[j]; list[j] = list[j+1]; list[j+1] =tmp; } } }}
//2、选择排序
其实选择排序的基本原理是:我用大白话讲就是:第一次,找出最小的一个,与第一个位置的数交换,第二次,是在剩余的数中,找出最小的数,与第二个位置的数交换,继续到找完为止。个人觉得,他与冒泡排序的区别之一就是:冒泡排序是,只要找到比它小的就交换,而选择排序是找到比它小的,还要继续找,一直找到最小的。才交换,重要的、容易出错的地方我都已注释。
//2、选择排序public void selectSort(int[] list){ int index =0; for(int i=0; i < list.length; i++){ int tmpSmall =list[i]; int j =i+1; int index =i; //循环重要的条件,无此条件,待排序数组中部分有序是会有问题 for(; j < list.length; j++){ if(list[j] < tmpSmall){ //找到最小位置index; tmpSmall = list[j]; index =j; } } list[index] = list[i]; //非最小数待排序,放到最小数的位置 list[i] =tmpSmall; //将最小数放到顺序位置,不能换成list[i] = list[j] }}
//3、插入排序,其基本原理是:一个(n-1)个数的有序数列,将第n个数插入其中,使得这n个数还是有序。明白了吗?说白了就是:2、8 、10、19 、20,。现在有个数13.,你要想办法找到10之后19之前的位置,再将13插到其位置,插入之后依然是个有序数列。
//插入排序public void insertSort(int[] list){ for(int i =1; i < list.length; i++){ int j =i-1;//第二个数为基数 tmp = list[i]; for(;j >=0 && tmp < list[j];j--){//基数位置往前找,比基数大的往后挪,给基数腾位置 list[j+1] = list[j]; } list[j+1] = tmp;//找到合适位置之后,还执行了j--所以j要加一 }}
//4、快速排序,快速排序和归并排序都用到了递归,有其相似之处。快速排序的原理:选择一个基准元素,一般就选择第一个或者是最后一个,加待排序的数列分成两部分,比基数大和比基数小。此时这个基数的位置就是最终排序的位置。然后用递归的方法,去排序化分的两个部分。
//快速排序public void quickSort(int[] list,int start,int end){ if(start < end){ int mid =getMiddle(int[] list,start,end; quickSort(list,start,mid); quickSort(list,mid+1,end); }}public int getMiddle(int[],list,int low,int high ){ int tmp = list[low]; while(low< high ){ while(low< high && list[low] <= tmp){ low++; } list[high ] =list[low] while(low < high && list[high ] >= tmp){ high--; } list[low] =list[high] } list[low] =tmp; return low;}
//5、归并排序:
归并排序的原理:将两个或者两个以上的的有序表合并成一个新的有序表。
public void mergingSort(int[] list, int start, int end){ if(start < end){ int mid =start + ((end - start)>>1); mergingSort(list,start,mid); mergingSort(list,mid+1,end); merge(list,start,mid,end); } }public void merge(int[] list, int start, int center, int end) { int[] tmpArr =new int[end-start+1]; int index =0; int tmp =start; int mid = center+1; while(start <= center && mid <= end){ if(list[start] < list[mid]){ tmpArr[index++] = list[start++]; }else{ tmpArr[index++] = list[mid++]; } } while(mid <= end){ tmpArr[index++] = list[mid++]; } while(start <= center){ tmpArr[index++] = list[start++]; } for(int i=0; i < tmpArr.length;i++){ list[tmp+i] = tmpArr[i]; } }
1 0
- 常用的几种排序算
- 常用的几种排序
- java的几种常用的排序
- 几种常用排序
- 几种常用排序
- 几种常用排序
- 几种常用排序
- 几种常用的排序方法。
- 几种常用的基本排序算法
- C#几种常用的排序算法
- C#几种常用的排序算法
- C#几种常用的排序算法:
- 几种常用的排序算法
- C#几种常用的排序算法
- 几种常用排序的实现
- 几种常用的排序算法
- 几种常用的排序算法
- 几种常用的排序算法
- java NIO
- 【转载】Android新特性介绍,ConstraintLayout完全解析
- [easyUI]Datagrid组件的使用
- hdu 2516 取石子游戏(斐波那契博弈)
- 【模拟试题】技能树 树形DP
- 常用的几种排序算
- 将html文件统一改成jsp文件
- 八皇后问题(递归+回溯法)
- 华为机试题(2017/04/01)
- bzoj4807車
- 5.多个线程访问共享对象和数据的方式
- 安卓工程师入门——ListView
- 盘点各编程语言中有趣的开源项目!
- nyist737 石子合并