网站首页 > java教程 正文
常见的排序算法如下:
性能比较如下:
一般不会要求写太复杂的排序算法,能写几个简单的排序算法即可
冒泡排序
冒泡排序思路比较简单:
- 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素;
- ( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;)
- 对序列当中剩下的n-1个元素再次执行步骤1。
- 对于长度为n的序列,一共需要执行n-1轮比较
- (利用while循环可以减少执行次数)
简单选择排序
在要排序的一组数中,选出最小(或者最大)的一个数与第1个位置的数交换;然后在剩下的数中再找最小(或者最大)的与第2个位置的数交换,以此类推,知道第n-1个元素(倒数第二个数)和第n个元素(最后一个数)比较为止。
快速排序
- 从数列中取出一个数作为基准数
- 分区过程,将比它大的数全放到它的右边,小于或等于它的数全放到它的左边
- 再对左右区间重复第二步,直到各区间只有一个数
归并排序
假设初始序列含有n个记录,则可看成是n个有序的子序列,每个子序列的长度为1,然后两两归并,得到个长度为2或1的有序子序列,在两两归并,…,如此重复,直至得到一个长度为n的有序序列为止,这种排序方法称为2-路归并排序
方便大家粘贴,放一下文字格式
冒泡排序
public class BubbleSort { //交换元素顺序 public static void swap(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } //冒泡排序 public static void bubbleSort(int[] a) { for (int i=0; i<a.length - 1; i++) { for (int j=0; j<a.length - 1 - i; j++) { if (a[i] > a[i + 1]) { swap(a, i, i + 1); } } } } public static void main(String[] args) { int[] a = {1, 5, 2, 4, 7, 6}; bubbleSort(a); //[1, 2, 4, 5, 6, 7] System.out.println(Arrays.toString(a)); } }
选择排序
public class SelectSort { public static void swap(int[] a, int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } public static void selectSort(int[] a) { for (int i=0; i<a.length; i++) { int min = a[i]; int index = i; for (int j=i; j<a.length; j++) { if (a[j] < min) { min = a[j]; index = j; } } if (index != i) { swap(a, i, index); } } } public static void main(String[] args) { int[] a = {1, 5, 2, 4, 7, 6}; selectSort(a); //[1, 2, 4, 5, 6, 7] System.out.println(Arrays.toString(a)); } }
快速排序
public class QuickSort { public static int sort(int[] a, int low, int high) { int key = a[low]; while (low < high) { //从high所指位置向前搜索找到第一个关键字小于key的记录和key互相交换 while (low < high && a[high] >= key) { high--; } a[low] = a[high]; //从low所指位置向后搜索,找到第一个关键字大于key的记录和key互相交换 while (low < high && a[low] <= key) { low++; } a[high] = a[low]; } //此时low和key相等 a[low] = key; return low; } public static void quickSort(int[] a, int low, int high) { if (low < high) { int key = sort(a, low, high); quickSort(a, low, key - 1); quickSort(a, key + 1, high); } } public static void main(String[] args) { int[] a = {1, 5, 2, 4, 7, 6}; quickSort(a, 0, a.length - 1); //[1, 2, 4, 5, 6, 7] System.out.println(Arrays.toString(a)); } }
归并排序
public class MergeSort { public static void sort(int[] src) { int[] temp = new int[src.length]; msort(src,temp,0,src.length-1); } public static void msort(int[] src,int[] dest,int left,int right) { if (left < right) { int mid = (left + right) / 2; msort(src,dest,0,mid); msort(src,dest,mid+1,right); merge(src,dest,0,mid,right); } } public static void merge(int[] src,int[] dest,int left,int mid,int right) { int i = left;//左边数组的游标 int j = mid + 1;//右边数组的游标 int index = 0;//dest起一个中途存储的作用,这个是dest数组的游标 while (i <= mid && j <= right) { if (src[i] <= src[j]) { dest[index++] = src[i++]; } else { dest[index++] = src[j++]; } } //复制左边剩余的数组 while (i <= mid) { dest[index++] = src[i++]; } //复制右边剩余的数组 while (j <= right) { dest[index++] = src[j++]; } index = 0; while (left <= right) { src[left++] = dest[index++]; } } public static void main(String[] args) { int[] arr = {7,5,3,4,2,1,6,2,9,8}; sort(arr); //[1, 2, 2, 3, 4, 5, 6, 7, 8, 9] System.out.println(Arrays.toString(arr)); } }
- 上一篇: java实现选择排序(java选择排序函数)
- 下一篇: 十大经典排序算法总结(十种排序算法)
猜你喜欢
- 2024-10-31 「Java基础」你必须知道的Java排序算法
- 2024-10-31 Java排序算法实现方式(算法思路 过程动图)
- 2024-10-31 一文读懂Java排序算法(所有的排序算法比较)
- 2024-10-31 java数据结构与算法之快速排序(用java实现快速排序算法)
- 2024-10-31 开发人员是如何使用Java进行排序?
- 2024-10-31 算法:什么是外部排序(外部排序有哪几种)
- 2024-10-31 Java 常见的排序算法,一次跟你说明白 ~ 直接插入排序
- 2024-10-31 Java排序算法-Java入门|Java基础课程
- 2024-10-31 必看java八大排序算法(java十大排序算法)
- 2024-10-31 冒泡排序、插入排序、选择排序、希尔排序
你 发表评论:
欢迎- 07-15采用Oracle OSB总线进行服务注册和接入
- 07-15javaEE 新闻管理系统 oracle11+tomcat6
- 07-15从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 07-15如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 07-15【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 07-15【mykit-data】 数据库同步工具(数据库表同步工具)
- 07-15[Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- 07-15Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- 最近发表
-
- 采用Oracle OSB总线进行服务注册和接入
- javaEE 新闻管理系统 oracle11+tomcat6
- 从Oracle演进看数据库技术的发展(oracle数据库发展史)
- 如何升级oracle数据库安全补丁(oraclepsu补丁升级)
- 【权威发布】关于Oracle WebLogic Server未授权远程代码执行高危漏洞的预警通报
- 【mykit-data】 数据库同步工具(数据库表同步工具)
- [Java速成] 数据库基础,Connector/J、JDBC、JPA的关系(day 7)
- Google前工程主管“入住”Oracle(google浏览器找不到以前的书签)
- Oracle数据库云服务系列新增前所未有的企业级功能
- 直播预告丨如何实现Oracle存储过程到java的一键转化
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)