介绍4个常用的排序法。冒泡排序、插入排序、快速排序、选择排序法
2012-03-30 20:11
411 查看
因为算法在编程用经常用到,不同的算法不用的效率。所以算法对我们来说很重要。
引用 http://www.zhjie.net
冒泡排序,
2.插入排序,插入排序相对于冒泡排序来说,效果要提高一些
3. 选择排序法 ,相对于上面两个来说,又快了不少
4. 最霸气的快速查找法,这方法速度非常之快,100W的速度两秒钟搞定,只是占有内存也比较大的,
每个方法都有排序前后的对比时间,可以根据这个来判断每个方法的效率
引用 http://www.zhjie.net
冒泡排序,
import java.util.Calendar;public class BubbleSort { /** * 冒泡排序 */ public static void main(String[] args) { int num[] = new int[100000]; // 给num数组赋值 for (int i = 0; i < num.length; i++) { num[i] = (int)(Math.random() * 1000); } //计算开始时间 Calendar cal=Calendar.getInstance(); System.out.println("输出排序前的时间:"+cal.getTime()); // 排序 for (int i = 0; i < num.length - 1; i++) { // 外层循环次数 for (int j = 0; j < num.length - 1; j++) { // 内层循环的次数 if (num[j] > num[j + 1]) { // 设定一个临时变量并赋一个初值 int temp = num[j]; //交换位置 num[j] = num[j + 1]; num[j + 1] = temp; } } } //排序后的时间 cal=Calendar.getInstance(); System.out.println("输出排序后的时间:"+cal.getTime()); //从小到大输出num // for(int i:num){ // System.out.println(i); // } } }
2.插入排序,插入排序相对于冒泡排序来说,效果要提高一些
import java.util.Calendar; import java.util.Date; public class InsertSort { /** *插入排序 */ public static void main(String[] args) { int num[] = new int[100000]; // 给num数组赋值 for (int i = 0; i < num.length; i++) { num[i] = (int) (Math.random() * 1000); } //计算开始时间 Calendar cal=Calendar.getInstance(); System.out.println("输出排序前的时间:"+cal.getTime()); //从第2个数开始循环 for(int i=1;i<num.length;i++){ //需要插入的数 int insert=num[i]; int index=i-1; //index>=0 防止数组越界 insert<num[index] 是判断插入的数是否大于当前数 while(index>=0&&insert<num[index]){ //将num[index+1]往后移动一位 num[index+1]=num[index]; //将index往前移动 index--; } //如果插入的数小于num[index],就将insert插入到num[index] num[index+1]=insert; } //排序后的时间 cal=Calendar.getInstance(); System.out.println("输出排序后的时间:"+cal.getTime()); // for (int i : num) { // System.out.println(i); // } } }
3. 选择排序法 ,相对于上面两个来说,又快了不少
import java.util.Calendar; public class SelectSort { /** * 选择排序法 */ public static void main(String[] args) { int arr[] = new int[100000]; // 给num数组赋值 for (int i = 0; i < arr.length; i++) { arr[i] = (int)(Math.random() * 1000); } //插入前的时间 Calendar cal=Calendar.getInstance(); System.out.println("排序前的时间:"+cal.getTime()); //循环长度-1次 for(int i=0;i<arr.length-1;i++){ //赋值一个数给最小值 int min=arr[i]; //记录最小数下标 int minIndex=i; //设置临时变量 int temp=0; for(int k=i+1;k<arr.length;k++){ //从i的下一个值开始循环 if(min>arr[k]){ min=arr[k]; minIndex=k; } } //交换 temp=arr[i]; arr[i]=arr[minIndex]; arr[minIndex]=temp; } //排序后的时间: cal=Calendar.getInstance(); System.out.println("排序后的时间:"+cal.getTime()); //从小到大输出num // for(int i:arr){ // System.out.println(i); // } } }
4. 最霸气的快速查找法,这方法速度非常之快,100W的速度两秒钟搞定,只是占有内存也比较大的,
import java.util.Calendar; public class QuickSort { /** * @快速排序法 */ public static void main(String[] args) { int arr[] = new int[1000]; // 给num数组赋值 for (int i = 0; i < arr.length; i++) { arr[i] = (int)(Math.random() * 1000); } QuickSort qs=new QuickSort(); //排序前时间 Calendar cal=Calendar.getInstance(); System.out.println("开始时间:"+cal.getTime()); qs.sort(0, arr.length-1, arr); //排序后时间 cal=Calendar.getInstance(); System.out.println("结束时间:"+cal.getTime()); } //快速排序 public void sort(int left,int right,int arr[]){ int l=left; int r=right; int pivot=arr[(left+right)/2]; int temp=0; while(l<r){ while(arr[l]<pivot)l++; while(arr[r]>pivot)r--; if(l>=r)break; temp=arr[l]; arr[l]=arr[r]; arr[r]=temp; if(arr[l]==pivot) --r; if(arr[r]==pivot) ++l; } if(l==r){l++;r--;} if(left<r) sort(left,r,arr); if(right>l) sort(l,right,arr); } }
每个方法都有排序前后的对比时间,可以根据这个来判断每个方法的效率
相关文章推荐
- 元素排序几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- PHP常用排序算法 冒泡排序 快速排序 插入排序
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
- PHP常用排序算法实例小结【基本排序,冒泡排序,快速排序,插入排序】
- 常用的排序算法(快速排序、插入排序、希尔排序、堆排序、冒泡排序、选择排序、归并排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- C语言常用的排序方法:冒泡排序,插入排序,快速排序,堆排序,希尔排序
- 常用算法--基本排序算法(冒泡排序,选择排序,插入排序,快速排序,归并排序,桶排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 【数据结构】常用比较排序算法(包括:选择排序,堆排序,冒泡排序,选择排序,快速排序,归并排序)
- C语言常用的几种排序算法代码(选择排序,冒泡排序,插入排序,快速排序)
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 浅谈C++之冒泡排序、希尔排序、快速排序、插入排序、堆排序、基数排序性能对比分析(好戏在后面,有图有真相)
- (一)Java实现排序,选择排序,快速排序,冒泡排序,插入排序
- 冒泡排序,选择排序,快速排序,插入排序,折半选择排序
- Java-冒泡排序、快速排序、插入排序、快速排序
- c语言中的几种排序算法——冒泡排序、快速排序、插入排序、选择排序
- 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较