常用的排序方法有:冒泡排序、快速排序、选择排序、插入排序、归并排序,除此之外,还有基数排序、鸡尾酒排序、桶排序、鸽巢排序、希尔排序等,这里着重介绍下前半段列举的几种常见方法的实现。

  1. 冒泡排序法:

/** 1.比较相邻元素:如果第一个比第二个大,就交换* 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对* 3.针对所有的元素重复以上的步骤,除了最后一个*/
public class Bubble {public static int[] sort(int[] data){int temp;int size = data.length;for(int i=0;i<size-1;i++){for(int j=i+1;j<size;j++){if(data[i] > data[j]){temp = data[i];data[i] = data[j];data[j] = temp;}}}return data;}
}

  2. 快速排序法:

/** 1.从数列中挑出一个基准值* 2.重新排序数列,比基准值小的元素放在基准前,比基准值大的放在基准后,相同的可放到任一边* 3.递归进行如上操作*/
public class Quick {public static int[] sort(int[] data, int start, int end){if(start < end){int base = data[start];int temp;int i=start,j=end;do {while ((data[i] < base) && (i < end))i++;while ((data[j] > base) && (j > start))j--;if(i <= j){temp = data[i];data[i] = data[j];data[j] = temp;i++;j--;}}while (i<=j);if(start < j){sort(data,start,j);}if(end > i){sort(data,i,end);}}return data;}
}

  3. 选择排序法:每次寻找序列中的最小值,然后放在最末尾的位置。

/**1.在未排序序列中找到最小元素,存放到排序序列的起始位置*2.再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾*3.以此类推,直到所有元素均排序完毕*/
public class Select {public static int[] sort(int[] data){int temp;int size = data.length;for (int i = 0; i < size; i++) {int k = i;for (int j = size - 1; j >i; j--)  {if (data[j] < data[k])k = j;}temp = data[i];data[i] = data[k];data[k] = temp;}return data;}
}

  4. 插入排序法:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

/** 1.从第一个元素开始,取出下一个元素,在已经排序的元素序列中从后向前扫描,如果该元素(已排序)大于新元素,将该元素移到下一位置* 2.重复1,直到找到已排序的元素小于或者等于新元素的位置* 3.将新元素插入到该位置中* 4.重复步骤2-3*/
public class Insert {public static int[] sort(int[] data) {int size = data.length;int temp;int j;for (int i = 1; i < size; i++) {temp = data[i];for (j = i; j > 0 && temp < data[j - 1]; j--)data[j] = data[j - 1];data[j] = temp;}return data;}
}

  5. 归并排序法:

/** 1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列* 2.设定两个指针,最初位置分别为两个已经排序序列的起始位置* 3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置* 4.重复步骤3直到某一指针达到序列尾* 5.将另一序列剩下的所有元素直接复制到合并序列尾*/
public class Merge{public static int[] sort(int[] data,int left, int right){int t = 1;int size = right - left + 1;while (t < size) {int s = t;t = 2 * s;int i = left;while (i + (t - 1) < size) {merge(data, i, i + (s - 1), i + (t - 1));i += t;}if (i + (s - 1) < right)merge(data, i, i + (s - 1), right);}return data;}private static void merge(int[] data, int p, int q, int r) {int[] B = new int[data.length];int s = p;int t = q + 1;int k = p;while (s <= q && t <= r) {if (data[s] <= data[t]) {B[k] = data[s];s++;} else {B[k] = data[t];t++;}k++;}if (s == q + 1)B[k++] = data[t++];elseB[k++] = data[s++];for (int i = p; i <= r; i++)data[i] = B[i];}
}

  6. 测试代码:

public class SortMethodTest {public static void main(String[] args) {int[] data = new int[6];data[0] = 15;data[1] = 23;data[2] = 8;data[3] = 19;data[4] = 21;data[5] = 8;System.out.println("排序前:"+data[0]+","+data[1]+","+data[2]+","+data[3]+","+data[4]+","+data[5]);//冒泡法int [] afterBubbleSortedData = Bubble.sort(data);System.out.println("冒泡排序法排序后:"+afterBubbleSortedData[0]+","+afterBubbleSortedData[1]+","+afterBubbleSortedData[2]+","+afterBubbleSortedData[3]+","+afterBubbleSortedData[4]+","+afterBubbleSortedData[5]);//快速排序法int[] afterQuickSortedData = Quick.sort(data,0,4);System.out.println("快速排序法排序后:"+afterQuickSortedData[0]+","+afterQuickSortedData[1]+","+afterQuickSortedData[2]+","+afterQuickSortedData[3]+","+afterQuickSortedData[4]+","+afterQuickSortedData[5]);//选择排序法int[] afterSelectSortedData = Select.sort(data);System.out.println("选择排序法排序后:"+afterSelectSortedData[0]+","+afterSelectSortedData[1]+","+afterSelectSortedData[2]+","+afterSelectSortedData[3]+","+afterSelectSortedData[4]+","+afterSelectSortedData[5]);//插入排序法int[] afterInsertSortedData = Insert.sort(data);System.out.println("插入排序法排序后:"+afterInsertSortedData[0]+","+afterInsertSortedData[1]+","+afterInsertSortedData[2]+","+afterInsertSortedData[3]+","+afterInsertSortedData[4]+","+afterInsertSortedData[5]);//归并排序法int[] afterMergeSortedData = Merge.sort(data,0,1);System.out.println("归并排序法排序后:"+afterMergeSortedData[0]+","+afterMergeSortedData[1]+","+afterMergeSortedData[2]+","+afterMergeSortedData[3]+","+afterMergeSortedData[4]+","+afterMergeSortedData[5]);}
}

测试结果

排序前:15,23,8,19,21,8
冒泡排序法排序后:8,8,15,19,21,23
快速排序法排序后:8,8,15,19,21,23
选择排序法排序后:8,8,15,19,21,23
插入排序法排序后:8,8,15,19,21,23
归并排序法排序后:8,8,15,19,21,23

转自:http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html

转载于:https://www.cnblogs.com/hunterCecil/p/6574255.html

基于JAVA实现的排序算法总结相关推荐

  1. Java折半二叉树,成都汇智动力-Java实现常用排序算法

    原标题:成都汇智动力-Java实现常用排序算法 排序算法介绍 1. 基本概念 稳定性: 待排序的数列中,若两个元素的值相等 R1 = R2 ,在排序结束之后,元素之间的相对位置没有发生变化,则称排序算 ...

  2. Java默认的排序算法

    Java基础-08 [08:11] Java默认的排序算法: 需要区分: 是 Arrays.sort() 还是 Collections.sort() (底层是调用 Arrays.sort()): 什么 ...

  3. android studio插入数据表中没有_学Java能拿高薪吗 Java中常见排序算法有哪些

    学Java能拿高薪吗?Java中常见排序算法有哪些?作为老牌编程语言,Java拥有广阔的市场占有率,几乎90%以上的大中型互联网应用系统在服务端开发都会首选Java.为了加入到Java这一高薪行业,很 ...

  4. Java 实现常见排序算法

    Java 实现常见排序算法 1. 综述 复习常见排序算法,用Java实现. 2. 代码 1 package cn.edu.tju.scs; 2 3 public class Sort { 4 publ ...

  5. Java回炉之排序算法

    Java回炉之排序算法 Java回炉之排序算法 冒泡排序 插入排序 归并排序 快速排序 希尔排序 选择排序 堆排序 冒泡排序 一次次遍历数组,每次比较相邻两个. 两重循环,内层比较index和inde ...

  6. 【黑马程序员】 学习笔记 - Java数组及排序算法

    ----------------------android培训.java培训.期待与您交流!---------------------- JAVA数组及排序算法 一  数组 1.定义 定义:有联系的一 ...

  7. java插入排序实现,经典(Java版)排序算法的分析及实现之一直接插入排序

    预备知识 排序算法从功能上是对一个数据元素集合或序列重新排列成一个按数据元素某个相知有序的序列.从内存空间使用简单上看分为内部排序和外部排序. 内部排序是数据记录在内存中进行排序,适合不太大的元素序列 ...

  8. java八大经典排序算法

    排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说说八大排序就是内部排序. 当n较大,则应采用 ...

  9. JAVA十大排序算法动画_十大排序算法(java实现)

    [前言]最近在重新研究算法,此篇博文供自己复习使用也为方便广大程序员同学!此文代码均为自己实现,通过对比经典解法校验,若有错请读者及时提出! - [对比分析图]首先,我们先来对比分析一下这十大排序算法 ...

最新文章

  1. Java删除指定文件夹下的文件和目录
  2. 原生js设置div隐藏或者显示_JS实现“隐藏与显示”功能(多种方法)
  3. Canonical 开源 MicroK8 | 云原生生态周报 Vol. 25
  4. android activity 渐变,关于Android的径向渐变高级编程的实现
  5. WPF Grid动态显示或隐藏一列的一种方法
  6. 【孤儿进程】孤儿进程组、守护进程
  7. Linux下如何删除长时间不使用的旧文件?
  8. 四面楚歌的Android工程师该何去何从
  9. Perl 安装Inline 和 Inline Java模组(windows)
  10. 1.5节 卡诺图以及布尔代数(SOP,POS)part1
  11. 侵入式框架和非侵入式框架的区别
  12. 几款移动跨平台App开发框架比较
  13. 【洛谷试炼场】新手村:洛谷的第一个任务
  14. 冷高轮时间 小人人体形状造型 手势 麻将 扑克 数字时钟APP android安卓版本/iOS苹果版本
  15. 如何备份博客:利用博客备份工具BlogDown
  16. 程序员,技术主管和架构师
  17. Python基础笔记——函数
  18. 【笔记】在 Windows 中制作 Ubuntu 系统的USB启动盘
  19. DeepFM理论与实践
  20. 使用NODEJS+REDIS开发一个消息队列以及定时任务处理

热门文章

  1. 无线循环里面 string = “i”会内存溢出吗?_记一次公司JVM堆溢出抽茧剥丝定位的过程...
  2. 中兴存储服务器 操作系统,中兴新支点服务器操作系统:企业级的国内服务器操作系统...
  3. highcharts一天时间 与一周时间_一天当中什么时间减肥降重最好的
  4. UriComponentsBuilder 拼接URL、解析URL
  5. 圆柱属于能滚动的物体吗_一户多宅属于违建吗?怎么能拥有多一点的宅基地
  6. 华为云welink考试试题_华为内部开启WeLink项目,华为云是这样考虑的-通信/网络-与非网...
  7. 隐藏html表格边框显示,table显示所有边框 table的边框怎么显示不出来
  8. android ontoch事件无反应_一切从android的handler说起(三)
  9. system.img解包打包工具_好程序员云计算学习路线分享文件打包及压缩
  10. rror Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that