内部排序之交换排序
来源:互联网 发布:彩票人工计划软件 编辑:程序博客网 时间:2024/06/05 18:10
冒泡排序
冒泡排序是很常见的交换排序之一,也是面试中经常问到的一种排序算法。
对于包含n个数据的一组记录,在最坏的情况下,冒泡排序需要进行n-1趟比较。
第一趟:依次比较0和1、1和2、2和3、·······的元素,如果发现第一个数据大于后一个数据,则交换他们。经过第一趟比较,最大的元素排到了最后。
第二趟:依次比较0和1、1和2、2和3、····n-3和n-2处的元素,如果第一个数据大于后一个数据,交换
·········
实际上,冒泡排序的每趟结束后,能够将当前较大的值放到最后面的位置,而且能够理顺前面的元素;如果某趟没有发生交换,可以提前结束排序
冒泡排序十分简单,容易想象理解,下面是java代码:
public class BubbleSort {public static void bubbleSort(DataWrap[] data) {System.out.println("开始排序");int length=data.length;for (int i = 0; i < length-1; i++) {boolean flag=false;for (int j = 0; j < length-1-i; j++) {//如果j索引处的元素大于j+1索引处的元素if (data[j].compareTo(data[j+1])>0) {//交换DataWrap tmp=data[j+1];data[j+1]=data[j];data[j]=tmp;flag=true;}}System.out.println(Arrays.toString(data));if (!flag) {break;}}}public static void main(String[] args) {DataWrap[] data={new DataWrap(9, ""),new DataWrap(16, ""),new DataWrap(21, ""),new DataWrap(23, ""),new DataWrap(30, ""),new DataWrap(49, ""),new DataWrap(21, "*"),new DataWrap(30, "*")};System.out.println("排序前:\n"+Arrays.toString(data));bubbleSort(data);System.out.println("排序后:\n"+Arrays.toString(data));}}
快速排序
快速排序是一个速度非常快的交换排序方法,基本思路很简单:从待排序的数据序列中任取一个数据作为分界值,所有比它小的元素放在左边,所有比它大的数据放在右边。经过第一次交换,形成左右两个子序列,左边序列中数据元素值比分界值小,右边序列中数据元素值都比分界值大。
接下来对左右两个子序列进行递归,对两个子序列重新选择中心元素并进行调整,直到每个子序列的元素只剩一个,排序完成。
源码如下:
public class QuickSort {private static void swap(DataWrap[] data,int i,int j) {DataWrap tmp;tmp=data[i];data[i]=data[j];data[j]=tmp;}public static void subSort(DataWrap[] data,int start,int end) {if (start<end) {//以第一个元素作为分界值DataWrap base=data[start];//i从左边开始搜索,搜索大于分界值的元素的索引int i=start;//j从右边开始搜索,搜索小于分界值的元素的索引int j=end+1;while (true) {//找到大于分界值的元素的索引,或i已经到了end处while (i<end&&data[++i].compareTo(base)<=0);//找到小于分界值的元素的索引,或j已经到了start处while (j>start&&data[--j].compareTo(base)>=0);if (i<j) {swap(data, i, j);}else {break;}}swap(data, start, j);subSort(data, start, j-1);subSort(data, j+1, end);}}public static void quickSort(DataWrap[] data) {subSort(data, 0, data.length-1);}public static void main(String[] args) {DataWrap[] data={new DataWrap(9, ""),new DataWrap(16, ""),new DataWrap(21, ""),new DataWrap(23, ""),new DataWrap(30, ""),new DataWrap(49, ""),new DataWrap(21, "*"),new DataWrap(30, "*")};System.out.println("排序前:\n"+Arrays.toString(data));quickSort(data);System.out.println("排序后:\n"+Arrays.toString(data));}}
- 内部排序之交换排序
- 内部排序之交换排序
- 经典内部排序之交换排序
- 内部排序之二:交换排序
- 内部排序之交换排序:冒泡排序,快速排序
- 5类内部排序----交换排序之冒泡排序
- 内部交换排序---冒泡排序
- 内部交换排序---快速排序
- 内部排序-交换类排序
- java排序 内部排序 交换排序
- 内部排序-交换式排序-快速排序
- 内部排序-交换式排序-选择排序
- 内部排序(一)------插入排序、交换排序
- 排序之交换排序
- 排序算法复习之——内部排序算法之——交换排序
- 内部排序总结 (二)交换排序
- 内部排序算法2(交换排序)
- 【第16周-内部排序项目3—交换排序之冒泡排序】
- IOT(Index Organized Table)
- Mybatis 和 spring mvc 项目整合流程注解版实例(个人理解)
- 指针数组 数组指针的区别
- Good blog for Wince DEVELOP
- 完美人格
- 内部排序之交换排序
- 加速计
- How to check Win7 or 64bit environment
- 使用printk调试kernel
- 关于android视频播放开发中 播放视频只有声音没有图像的问题解决方案
- printf
- 基于LabVIEW的视觉软件平台提升机器视觉系统应用优势
- 备忘学习笔记
- windows下pomelo开发环境搭建及JS乱码问题