Java编程实现数组排序——(二)交换排序
来源:互联网 发布:女超人于莺离婚知乎 编辑:程序博客网 时间:2024/05/18 03:18
借助“交换”进行排序的方法。
一、冒泡排序
冒泡排序是比较相邻两个元素,若为逆序,则交换两个元素,然后比较第二个记录与第三个记录的值,依次类推。一趟冒泡排序的结果是使其中最大(小)的记录冒到最后的位置。
若为正序,冒泡排序只需要做n-1次关键字的比较,时间复杂度在这种情况下达到最好,为O(n)。
冒泡排序在最坏和平均情况下时间复杂度为O(n^2)。
用Java写的冒泡排序的一段代码如下:
public class Demo01 {public static void bubbleSort(int[] arr){for(int i=0;i<arr.length;i++){for(int j=0;j<arr.length-i-1;j++){if(arr[j+1]<arr[j]){int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}public static void main(String[] args) {int[] arr=new int[9];arr[0]=22;arr[1]=49;arr[2]=38;arr[3]=65;arr[4]=97;arr[5]=76;arr[6]=13;arr[7]=27;arr[8]=49;bubbleSort(arr);for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}}}
二、快速排序
快速排序是通过一趟排序将待记录分割成独立的两部分,其中一部分记录的关键字均比另外一部分记录关键字小。
整个快速排序的过程可以递归进行,一般选取序列中的某一个值作为“支点”,可以附设两个指针low和high,从high位置起向前搜索,找到第一个关键字小于“支点”的记录和“支点”记录交换,然后从low位置向后搜索,找到第一个关键字大于“支点”的记录和“支点”交换,直到low=high为止,完成了一次快速排序。
在所有数量级相同的先进的排序算法中,快速排序的常数因子最小,就平均时间而言,快速排序是目前被认为最好的一种内部排序算法。
若记录序列初始序列基本有序时,快速排序退化为冒泡排序。快速排序需要一个栈空间来实现递归。
时间复杂度:
最好、平均:O(nlogn)
最差:O(n^2)
空间复杂度:
最好:O(logn)
最差:O(n)
快速排序的Java实现如下:
public class Demo01 {/** * 一次快速排序过程 * @param arr待排序数组 * @param low低位置指针 * @param high高位置指针 * @returnlow */private static int Partition(int[] arr,int low,int high){arr[0]=arr[low];int pivotkey=arr[low];while(low<high){while(low<high&&arr[high]>=pivotkey)high--;//将比支点记录小的记录交换到低端arr[low]=arr[high];while(low<high&&arr[low]<=pivotkey)low++;//将比支点记录大的记录交换到高端arr[high]=arr[low];}arr[low]=arr[0];return low;}/** * 递归调用快速排序 * @param arr * @param low * @param high */private static void QSort(int[] arr,int low,int high){if(low<high){int pivotloc=Partition(arr, low, high);Partition(arr, low, pivotloc-1);Partition(arr, pivotloc+1, high);}}public static void QuickSort(int[] arr){QSort(arr, 1, arr.length-1);}public static void main(String[] args) {int[] arr=new int[9];arr[0]=22;arr[1]=49;arr[2]=38;arr[3]=65;arr[4]=97;arr[5]=76;arr[6]=13;arr[7]=27;arr[8]=49;QuickSort(arr);for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}}}
0 0
- Java编程实现数组排序——(二)交换排序
- Java编程实现数组排序——(一)插入排序
- Java编程实现数组排序——(三)选择排序
- java实现交换排序
- java实现交换排序
- 排序—交换排序(js实现)
- day_11_9 实现数组交换,排序
- Java排序算法总结之(二)——基于交换排序(冒泡排序、快速排序)
- 交换排序之快速排序Java实现
- 交换排序之冒泡排序Java实现
- 交换排序------冒泡排序(实现Java)
- java实现交换排序之冒泡排序
- Java实现交换排序之快速排序
- 交换排序----冒泡排序----java实现
- 排序——交换排序
- 排序——交换排序
- 交换排序—快速排序
- 快速排序法(QuickSort)——交换类排序法(java实现)
- Hibernate 关联映射one-to-one
- 无线轮播
- Matrix使用解析
- Homework After Class
- vsftp匿名用户上传下载配置
- Java编程实现数组排序——(二)交换排序
- 主机断电时,实例恢复中的各种情况分析:
- Lua脚本语言简明入门教程
- 算法库algorithm-6-searching
- RxJava+Retrofit+OkHttp深入浅出-终极封装三(文件上传)
- vc代码显示图像的质量问题,SetStretchBltMode的作用
- ARM GCC浮点编译选项
- 模块module间引用和使用本地maven库的jar包
- Objective-C枚举写法