冒泡排序&&选择排序 以及时间效率对比

感情迁移 提交于 2020-01-16 11:07:03
  1 package com.test4;
  2 import java.util.*; //Calendar 显示时间
  3 /**
  4  * @author qingfeng
  5  * 功能:冒泡排序
  6  */
  7 public class Bubble {
  8 
  9     public static void main(String[] args) {
 10         // TODO Auto-generated method stub
 11         //int arr[] = {10,1,-20,89,-1,78,-45};
 12         
 13         //随机产生大量数据
 14         
 15         int len = 50000;
 16         int[] arr = new int[len];
 17         
 18         
 19         for(int i=0; i<len; i++)
 20         {
 21             //产生1到1000的数
 22             arr[i] = (int)(Math.random()*1000);
 23         }
 24         /*
 25         for(int i=0; i<len; i++)
 26         {
 27             System.out.print(arr[i]+" ");
 28         }
 29         System.out.println();
 30         */
 31         BubbleSort bs = new BubbleSort();
 32         //显示排序前的时间
 33         Calendar time = Calendar.getInstance();//获取时间实例
 34         System.out.println("排序前的时间为:"+time.getTime());//50000个数排序4秒
 35         bs.sort(arr);
 36         
 37         /*
 38         SelectSort  ss = new SelectSort(); //50000个数排序1秒
 39         ss.sort(arr);
 40         */
 41         /*
 42         int a = 1;
 43         bs.test(a);
 44         System.out.println("a的值为:"+a);//a的值为1 并不是2 因为是值传递
 45         */
 46         
 47         /*
 48         System.out.println("-----------------------------");
 49         for(int i=0; i<arr.length; i++)
 50         {
 51             System.out.print(arr[i]+" ");
 52         }
 53         System.out.println();
 54         */
 55         //显示排序前的时间
 56         Calendar time2 = Calendar.getInstance();//获取时间实例
 57         System.out.println("排序后的时间为:"+time2.getTime());
 58     }
 59 }
 60 //冒泡排序
 61 class BubbleSort
 62 {
 63     public void test(int a)//值传递
 64     {
 65         a++;
 66     }
 67     public void sort(int arr[]) //引用传递(复合类型)
 68     {
 69         int temp;
 70         
 71         //冒泡排序
 72         //外层循环:n个数  n-1趟排序
 73         for(int i=0; i<arr.length-1; i++)
 74         {
 75             //内层循环:若前比后打则交换   (每趟比前一趟少排一个数:所以"-i")
 76             for(int j=0; j<arr.length-1-i; j++)
 77             {
 78                 if(arr[j]>arr[j+1])
 79                 {
 80                     temp = arr[j+1];
 81                     arr[j+1] = arr[j];
 82                     arr[j] = temp;            
 83                 }
 84             }
 85         }
 86     }
 87 }
 88 //选择排序
 89 class SelectSort
 90 {
 91     public void sort(int arr[])//引用传递
 92     {
 93         //外层循环:n个数 n-1趟排序  最后一个数不要再次排序
 94         for(int i=0; i<arr.length-1; i++)
 95         {
 96             int min=arr[i];
 97             int minIndex = i;
 98             
 99             int j;
100             int temp;
101             //内层循环:选择min值
102             for(j=i+1; j<arr.length; j++)
103             {
104                 if(min > arr[j])
105                 {
106                     min = arr[j];
107                     minIndex = j;
108                 }    
109             }
110             //最小值和每趟第一个值交换
111             temp = arr[i];
112             arr[i] = arr[minIndex];
113             arr[minIndex] = temp;
114         }
115     }
116         
117 }

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!