排序算法---交换排序( java)
来源:互联网 发布:备份软件下载 编辑:程序博客网 时间:2024/06/07 03:08
交换排序中最常用的就是冒泡排序和快速排序,回顾了一些冒泡排序,估计写完这些博客对排序算法算是有了很深的了解了,最后要做一个小总结了,将这些算法的时间复杂度和空间复杂度做一个对比,以后再排序的时候能够对着有比较充分的认识。
1.冒泡排序
public void bubbleSort(int[] a) {boolean ifBubble = false;for (int i = 0; i < a.length - 1; i++) { for (int j = 0; j < a.length-1-i; j++) {if(a[j]>a[j+1]){ a[j] = a[j]+a[j+1]; a[j+1] = a[j]-a[j+1]; a[j] = a[j]- a[j+1]; ifBubble = true;} } if(!ifBubble){break; }} }对于n个数的排序,我们只需要对其进行n-1次的循环排序就好了,(常识了)说一些冒泡的原理吧,就是通过将数组的前一个元素和后一个元素进行对比,然后将大的放到后面,将小的放到前面,然后再将后面的一个数和其后面的一个数进行对比,如果一个数比较大的话,这一过程将会类似于一个泡从低端向上冒,最终到达顶部,So we call the methond as Bubble Sort;
2.快速排序
算是对冒泡排序的一种改进吧,感觉实现难度要比冒泡难的多,很不容易思考,大体的实现过程是:定义两个数,分别从数组的开始和末位置,从开始位置开始查找大于分界值的数,从最后的位置查找小于分界值的数,当在开始找到小于分界值的数的时候停止向上去寻找,当从末尾查找数值的时候,当找到大于分界值的数的时候停止查找,当i和j不相等的时候,i<j的时候,我们从右边走是找小于该基数的,停止住说明j所停止的位置的数是大于基数的,同理i停止的位置是小于基数的,将两个数进行交换,那么循环可以再次进行,直到两个数的大小相等,注意此处i和j是不可能相等的,当i>j的时候,说明两端的值已经满足了条件了,然后将j的值和基数对调,这样两端的值就保证了一边大于,一边小于。然后将剩余的数进行递归就好了。
顺便说点递归的优缺点,自己找了点资料,好处就是代码写起来不会那么的麻烦和复杂,坏处就是对空间的消耗会比较大,可能会导致堆栈溢出从而导致程序崩溃,为了避免这一情况最好的措施就是通过循环来进行代替。
下面是快速排序的代码实现
public void quickSort (int []a,int start ,int end){ int i = start; int j = end+1; if(start < end){ while (true){ while (i< end && a[++i]>=a[start]); while (j>start&& a[--j]<= a[start]); if(i<j){ a[i] = a[i] + a[j]; a[j] = a[i] - a[j]; a[i] = a[i] - a[j]; } else break; } a[start] = a[j]+a[start]; a[j] = a[start] - a[j]; a[start] = a[start] - a[j]; quickSort (a,start,j-1); quickSort (a,j+1,end); } }
0 0
- 排序算法---交换排序( java)
- 排序算法之交换排序(Java)
- java算法-排序-交换排序
- Java排序算法(六)--冒泡排序(交换排序)
- 排序算法--交换排序(冒泡排序、快速排序、随机快速排序)java实现
- java算法之一冒泡排序(交换排序)
- java算法之三快速排序(交换排序)
- java排序算法之(交换法排序)
- Java排序算法之交换排序
- 排序算法-交换排序
- 交换排序(Java)
- java实现排序算法之交换排序(冒泡排序和快速排序)
- 【Java常用排序算法】交换排序(冒泡排序、快速排序)
- 排序算法----交换排序(冒泡排序,快速排序)
- 算法排序-交换排序(冒泡排序,快速排序)
- 排序算法(二)交换排序
- 排序算法小结(3)交换排序
- 内部排序算法2(交换排序)
- LocalDataStoreSlot VS CallContext
- versions中添加第三方库
- HDOJ 题目1503 Advanced Fruits(LCS 递归,模板)
- mac中安装maven3.2.1
- Eclipse+Tomcat远程调试
- 排序算法---交换排序( java)
- socket.io emit的几种用法解释
- SQL 按时间统计语句
- ubuntu下允许root用户ssh远程登录
- iTunes Connect居然支持中文了!
- java中的数据类型转换
- JAVA Jdom解析XML
- Android中Preference的使用以及监听事件分析
- IOS开发之深拷贝与浅拷贝(mutableCopy与Copy)详解