常用排序java实现
来源:互联网 发布:2017软件行业发展前景 编辑:程序博客网 时间:2024/05/17 21:44
排序算法复习
包括冒泡排序,快速排序,选择排序,插入排序,还有二分法查找
为了方便,这里排序都用数组进行演示。
package com.crazzy.sort;/** * Created by qqg on 2017/10/10. */public class Sort { /** * 冒泡排序 + 优化 * 1.比较相邻的俩个元素,将大的放入后面。 * 2.循环 1 ,直到满意元素比较为止。 * 3.优化: a.每次循环完后,下一次循环可以 -1 ,因为后面的数已经是排序好的了,不需要在比较 * b.每次交换时,用一个标记 f 记录,若存在一次不需要交换,说明排序提前完成,可以结束排序 * @param number */ public void bubbleSort(int []number){ boolean f ; //一旦有一次不用交换,说明已经排序好,不用在继续排序 int count = 0; //排序次数 for(int i=0;i<number.length;i++){ f = true; for(int j=0;j<number.length - 1 - i;j++){ count ++; if(number[j] > number[j+1]){ f = false; //交换俩个数,不使用中间变量哦~ number[j] = number[j] + number[j+1] ; number[j+1] = number[j] - number[j+1]; number[j] = number[j] - number[j+1]; } } //提前结束排序 if(f) break; } System.out.println("循环次数:"+count); } /** * 快速排序 * 1.从数列中挑出一个元素,称为“基准” * 2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。 * 在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。 * 3.递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。 * @param number */ public void quickSort(int [] number,int start,int end){ if(start < end){ int base = number[start]; int i = start, j = end; int temp; do{ while ((number[i] < base) && (i < end)) i++; while ((number[j] > base) && (j > start)) j--; if(i <= j){ temp = number[i]; number[i] = number[j]; number[j] = temp; i++; j--; } }while (i <= j); if (start < j) quickSort(number,start,j); if (end > i) quickSort(number,i,end); } } /** * 选择排序 * 1.在未排序序列中找到最小元素,存放到排序序列的起始位置 * 2.再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。(就是上一步排序的末尾) * 3.以此类推,直到所有元素均排序完毕。 * @param number */ public void selectSort(int []number){ int temp; for(int i=0;i<number.length;i++){ int k = i; for(int j=number.length-1;j > i;j--){ if(number[j] < number[k]) k = j; } temp = number[i]; number[i] = number[k]; number[k] = temp; } } /** *插入排序 * 1.从第一个元素开始,该元素可以认为已经被排序 * 2.取出下一个元素,在已经排序的元素序列中从后向前扫描 * 3.如果该元素(已排序)大于新元素,将该元素移到下一位置 * 4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置 * 5.将新元素插入到该位置中 * 6.重复步骤 2 * @param number */ public void insertSort(int []number){ int temp,j; for(int i = 1;i<number.length;i++){ temp = number[i]; for(j=i;j>0 && temp < number[j-1];j--) //查找插入的位置 number[j] = number[j-1]; number[j] = temp; } } /** * 遍历数组 * @param number */ public void ergodic(int []number){ for(int i = 0;i<number.length; i++){ System.out.print(number[i]+"\t"); } } /** * 二分法查找 * @param arr 查找数组 * @param num 查找元素 * @return 元素第一次出现的位置,若为 -1 表示没有找到 */ public int binarySearch(int []arr ,int num){ int start = 0; int end = arr.length - 1; while (start <= end){ int min = (start + end)/2; if(arr[min] < num){ start = min + 1; }else if(arr[min] > num){ end = min - 1; }else { return min; } } return -1; } public static void main(String[] args) { Sort sort = new Sort(); int number[] = {3,4,5,4,2,3,33,1,2}; sort.bubbleSort(number); //sort.quickSort(number,0,number.length-1); //sort.selectSort(number); sort.ergodic(number); int index = sort.binarySearch(number,2); System.out.println(index); //sort.insertSort(number); }}
还有归并排序,不是很清楚,就没有贴出来。先这样吧
阅读全文
0 0
- java实现常用排序
- 常用排序java实现
- 常用排序算法--Java实现
- java实现常用排序算法
- Java 常用排序算法实现
- 常用排序算法JAVA实现
- 常用排序算法 Java 实现
- 常用排序算法----Java实现
- Java常用排序算法实现
- 常用排序算法Java实现
- 常用排序算法-JAVA实现
- 常用排序算法java实现
- 常用排序算法Java实现
- 常用排序算法 Java 实现
- Java 常用排序算法 附java实现
- 常用排序算法的java实现
- java实现的几个常用排序算法
- 常用排序算法的实现(JAVA)
- PendingIntent和Intent详解
- mysql中的round函数
- 前端_双向绑定
- 推荐网站
- 阿里与腾讯人的区别,就是明教与武当的反差
- 常用排序java实现
- pyhon中Django框架的StreamingHttpResponse和HttpResponse
- 【Python】Pandas——apply函数
- ViewPager 实现显示第二个item
- 大白话讲解Promise
- Linux下C语言执行MySQL语句
- js 定时器
- 微信如何添加地图导航?公众号一键导航添加方法。
- C# 自定义控件闪烁 UserControl