java之最简单和最复杂的排序算法
2017-11-01 13:23
357 查看
冒泡排序:
当前元素和next元素对比大小如果从小到大排序,大的往后排,如果从大到小小的往后排
直到交换到最后一位,则是整个数据中最大(最小的)
则继续开始下一轮比较
ok 看看代码
public class BubleSort { public static int[] bubbleSort(int[] arr){ int size = arr.length; for(int i=0;i<size-1;i++){ for(int j=0;j<size-1-i;j++){ if(arr[j]>arr[j+1]){ swap(arr,j,j+1); } } } return arr; } public static void swap(int arr [],int num1,int num2){ int temp; temp=arr[num1]; arr[num1]=arr[num2]; arr[num2]=temp; } @Test public void sort(){ int arr[]={1,2,3,8,4,5}; System.out.println(bubbleSort(arr)); } }
快速排序
找基准值比大小
交换
继续查找
交换基准值到合适的位置
重复
快排,排序中据说是最快的(不然为啥叫做快排呢?),Arrays.sort()内部实现之一,快排是核心,同时也是分治法得一种
0.测试数据
int[]a={7,5,3,2,9,10,8,4,6,1};1.找基准值
基准值的问题,大家就先不要纠结,众说云云,选择哪个那个是最快的,这里我就假设第一个为基准值这里基准值就是a[0]=7;
2.比大小
这里呢,来两个指针i(数组开始index)和j(结束index)对比基准值
如果是从小到大呢,则是期望对比结果左边则是比基准值大的,右边比基准值小
如果是从大到小则相反
为什么是左边要找基准值大的呢,因为要交换
知道了期望结果,就知道怎么做了
3.交换
指针i,j都开始进行靠拢,如果i指针指向的值比基准值小,而j指针执行的值比基准值大,则交换4.继续查找
接着i,j继续靠拢,如果出现符合交换条件的就进行交换,同时也要符合i5.交换基准值到合适的位置
知道i,j指针相遇,则交换基准值6.重复
接着用分治法的思路,把左边和右边分开,继续进行以上过程(递归),最后得到的数组就是从小到大的顺序show 代码
public void quickSort(int[]arr,int left,int right) { if(left>right) return; int pivot=arr[left]; int i=left; int j=right; while(i<j){ while(arr[i]<pivot&&i<j) i++; while(arr[j]>pivot&&i<j) j--; if(i<j){ swap(arr,i,j); } } arr[left]=arr[i]; arr[i]=pivot; quickSort(arr,left,i-1); quickSort(arr,i+1,right); }
相关文章推荐
- Json树形结构数据转Java对象并存储到数据库的实现-超简单的JSON复杂数据处理 .
- 几种简单的排序算法(JAVA)
- Java练习:时间复杂度为O(n*n)的三大基本排序算法
- java实现简单的排序算法
- 时间复杂度为O(N)的常用排序算法总结与Java实现
- Java中几种简单的排序算法
- Java实现一部分简单的排序算法和数据结构(学习笔记20171022002)
- java的简单排序算法
- java几种排序算法的实现及简单分析
- Java中的几种排序算法:冒泡排序,插入排序,二分法排序,简单排序,快速排序
- JAVA简单类型与对象类型(复杂类型)
- Java实现经典排序算法及复杂度稳定性分析
- 排序算法之简单算法——java实现
- webservice delphi客户端 java服务器端 传输简单和复杂对象 小demo
- Json树形结构数据转Java对象并存储到数据库的实现-超简单的JSON复杂数据处理
- 黑马程序员——JAVA基础之简单的排序算法
- 用java实现编译器之代码实现Thompson构造:在简单NFA的基础上构造更复杂的NFA
- java简单实现常用的排序算法
- 几种排序算法java简单实现
- 黑马程序员——Java基础语法:几种简单的排序算法的实现