JAVA 实现五种基本排序方法的实现以及时间的统计

package test;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class sort {
	/**
	 *Author:April
	 *Date:2018.12.1
	 *Version:0.1
	 *Description:1、选择排序、冒泡排序、归并排序、快速排序、插入排序的算法原理。
	 *            2.不同排序算法时间效率的经验分析方法,验证理论分析与经验分析的一致性。
	 *
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		func();		
	}
	private static void func() {
		// TODO Auto-generated method stub
		System.out.println("1.选择排序 2.冒泡排序 3.合并排序 4.快速排序  5.插入排序");
		@SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入要选择的字母:");
		
		int num = sc.nextInt();
		//int num  = sc.nextInt();
		switch(num){
		case 1:
			//System.out.println("1");
		    select();
			break;
		case 2:
			bubble();
			break;
		case 3:
			merge();
			break;
		case 4:
			fast();
			break;
		case 5:
			insert();
			break;
		default:
			System.out.println("请输入正确的字母");
				
		}
		
	}
//插入排序
	private static void insert() {
		// TODO Auto-generated method stub
		//数据规模为10时
		double begin = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
		int[] nums = new int[10];  //定义一个一维数组
		  int count=0;
		  while(count<10) {
		   nums[count]=(int)(Math.random()*100);//产生100以内的随机数给nums
		   count++;
		  }
		  //插入排序
		  int insertNote;
		  for (int i = 1; i < nums.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
	            insertNote = nums[i];// 设置数组中的第2个元素为第一次循环要插入的数据
	            int j = i - 1;
	            while ( j >= 0 && insertNote < nums[j]) {
	            	nums[j + 1] = nums[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
	                j--;
	            }
	            nums[j + 1] = insertNote;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
	        }
		  System.out.println("数据规模为"+nums.length+"时");//数组长度
		  System.out.println("排序后序列为:");
		  for (int i = 0; i < nums.length; i++) {   //循环并打印出每个数组的数字
		   System.out.print(nums[i]+"\t") ;
		   }
		  double end = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
		  double time = end - begin;// 程序的运行时间		
		  System.out.println("\n排序所花平均时间(ms):"+time / 60*1000 );
		  
//数据规模为100时	  
		  double begin1 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
			int[] nums1 = new int[100];  //定义一个一维数组
			  int count1=0;
			  while(count1<100) {
			   nums1[count1]=(int)(Math.random()*100);//产生100以内的随机数给nums
			   count1++;
			  }
			  //插入排序
			  int insertNote1;
			  for (int i = 1; i < nums.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
		            insertNote1 = nums[i];// 设置数组中的第2个元素为第一次循环要插入的数据
		            int j = i - 1;
		            while ( j >= 0 && insertNote1 < nums[j]) {
		            	nums[j + 1] = nums[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
		                j--;
		            }
		            nums[j + 1] = insertNote1;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
		        }
			  System.out.println("数据规模为"+nums1.length+"时");//数组长度
			  System.out.println("排序后序列为:");
			  for (int i = 0; i < nums1.length; i++) {   //循环并打印出每个数组的数字
			   System.out.print(nums1[i]+"\t") ;
			   }
			  double end1 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
			  double time1 = end1 - begin1;// 程序的运行时间		
			  System.out.println("\n排序所花平均时间(ms):"+time1 / 60*1000 );
			  
//数据规模为1000时
			  double begin2 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
				int[] nums2 = new int[1000];  //定义一个一维数组
				  int count2=0;
				  while(count2<1000) {
					  nums2[count2]=(int)(Math.random()*100);//产生100以内的随机数给nums
					  count2++;
				  }
				  //插入排序
				  int insertNote2;
				  for (int i = 1; i < nums.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
			            insertNote2 = nums[i];// 设置数组中的第2个元素为第一次循环要插入的数据
			            int j = i - 1;
			            while ( j >= 0 && insertNote2 < nums[j]) {
			            	nums[j + 1] = nums[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
			                j--;
			            }
			            nums[j + 1] = insertNote2;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
			        }
				  System.out.println("数据规模为"+nums2.length+"时");//数组长度
				  System.out.println("排序后序列为:");
				  for (int i = 0; i < nums2.length; i++) {   //循环并打印出每个数组的数字
				   System.out.print(nums2[i]+"\t") ;
				   }
				  double end2 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
				  double time2 = end2 - begin2;// 程序的运行时间		
				  System.out.println("\n排序所花平均时间(ms):"+time2 / 60*1000 );
//数据规模为10000时
				  double begin3 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
					int[] nums3 = new int[10000];  //定义一个一维数组
					  int count3=0;
					  while(count3<10000) {
						  nums3[count3]=(int)(Math.random()*100);//产生100以内的随机数给nums
						  count3++;
					  }
					  //插入排序
					  int insertNote3;
					  for (int i = 1; i < nums.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
				            insertNote3 = nums[i];// 设置数组中的第2个元素为第一次循环要插入的数据
				            int j = i - 1;
				            while ( j >= 0 && insertNote3 < nums[j]) {
				            	nums[j + 1] = nums[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
				                j--;
				            }
				            nums[j + 1] = insertNote3;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
				        }
					  System.out.println("数据规模为"+nums3.length+"时");//数组长度
					  System.out.println("排序后序列为:");
					  for (int i = 0; i < nums3.length; i++) {   //循环并打印出每个数组的数字
					   System.out.print(nums3[i]+"\t") ;
					   }
					  double end3 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
					  double time3 = end3 - begin3;// 程序的运行时间		
					  System.out.println("\n排序所花平均时间(ms):"+time3 / 60*1000 );
//数据规模为100000时
					  double begin4 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
						int[] nums4 = new int[100000];  //定义一个一维数组
						  int count4=0;
						  while(count4<100000) {
							  nums4[count4]=(int)(Math.random()*100);//产生100以内的随机数给nums
							  count4++;
						  }
						  //插入排序
						  int insertNote4;
						  for (int i = 1; i < nums.length; i++) {// 从数组的第二个元素开始循环将数组中的元素插入
					            insertNote4 = nums[i];// 设置数组中的第2个元素为第一次循环要插入的数据
					            int j = i - 1;
					            while ( j >= 0 && insertNote4 < nums[j]) {
					            	nums[j + 1] = nums[j];// 如果要插入的元素小于第j个元素,就将第j个元素向后移动
					                j--;
					            }
					            nums[j + 1] = insertNote4;// 直到要插入的元素不小于第j个元素,将insertNote插入到数组中
					        }
						  System.out.println("数据规模为"+nums4.length+"时");//数组长度
//						  System.out.println("排序后序列为:");
//						  for (int i = 0; i < nums4.length; i++) {   //循环并打印出每个数组的数字
//						   System.out.print(nums4[i]+"\t") ;
//						   }
						  double end4 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
						  double time4 = end4 - begin4;// 程序的运行时间		
						  System.out.println("\n排序所花平均时间(ms):"+time4 / 60*1000 );
		
		
		
	}
//快速排序
	private static void fast() {
		// TODO Auto-generated method stub
		
	}
//合并排序
	private static void merge() {
		// TODO Auto-generated method stub
		
	}
//冒泡排序
	private static void bubble() {
		// TODO Auto-generated method stub
		//数据规模为10时
		double begin = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
		int[] nums = new int[10];  //定义一个一维数组
		  int count=0;
		  while(count<10) {
		   nums[count]=(int)(Math.random()*100);//产生100以内的随机数给nums
		   count++;
		  }
		  //冒泡排序
		for (int i = 0; i < nums.length - 1; i++) {// 外层循环控制排序趟数
			for (int j = 0; j < nums.length - 1 - i; j++) {// 内层循环控制每一趟排序多少次
				if (nums[j] > nums[j + 1]) {
					int temp = nums[j];
					nums[j] = nums[j + 1];
					nums[j + 1] = temp;
				}
			}
		}
		  System.out.println("数据规模为"+nums.length+"时");//数组长度
		  System.out.println("排序后序列为:");
		  for (int i = 0; i < nums.length; i++) {   //循环并打印出每个数组的数字
		   System.out.print(nums[i]+"\t") ;
		   }
		  double end = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
		  double time = end - begin;// 程序的运行时间		
		  System.out.println("\n排序所花平均时间(ms):"+time / 60*1000 );
		  
//数据规模为100时	  
		  double begin1 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
			int[] nums1 = new int[100];  //定义一个一维数组
			  int count1=0;
			  while(count1<100) {
			   nums1[count1]=(int)(Math.random()*100);//产生100以内的随机数给nums
			   count1++;
			  }
			  //冒泡排序
				for (int i = 0; i < nums.length - 1; i++) {// 外层循环控制排序趟数
					for (int j = 0; j < nums.length - 1 - i; j++) {// 内层循环控制每一趟排序多少次
						if (nums[j] > nums[j + 1]) {
							int temp = nums[j];
							nums[j] = nums[j + 1];
							nums[j + 1] = temp;
						}
					}
				}
			  System.out.println("数据规模为"+nums1.length+"时");//数组长度
			  System.out.println("排序后序列为:");
			  for (int i = 0; i < nums1.length; i++) {   //循环并打印出每个数组的数字
			   System.out.print(nums1[i]+"\t") ;
			   }
			  double end1 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
			  double time1 = end1 - begin1;// 程序的运行时间		
			  System.out.println("\n排序所花平均时间(ms):"+time1 / 60*1000 );
			  
//数据规模为1000时
			  double begin2 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
				int[] nums2 = new int[1000];  //定义一个一维数组
				  int count2=0;
				  while(count2<1000) {
					  nums2[count2]=(int)(Math.random()*100);//产生100以内的随机数给nums
					  count2++;
				  }
				  //冒泡排序
				  //冒泡排序
					for (int i = 0; i < nums.length - 1; i++) {// 外层循环控制排序趟数
						for (int j = 0; j < nums.length - 1 - i; j++) {// 内层循环控制每一趟排序多少次
							if (nums[j] > nums[j + 1]) {
								int temp = nums[j];
								nums[j] = nums[j + 1];
								nums[j + 1] = temp;
							}
						}
					}
				  System.out.println("数据规模为"+nums2.length+"时");//数组长度
				  System.out.println("排序后序列为:");
				  for (int i = 0; i < nums2.length; i++) {   //循环并打印出每个数组的数字
				   System.out.print(nums2[i]+"\t") ;
				   }
				  double end2 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
				  double time2 = end2 - begin2;// 程序的运行时间		
				  System.out.println("\n排序所花平均时间(ms):"+time2 / 60*1000 );
//数据规模为10000时
				  double begin3 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
					int[] nums3 = new int[10000];  //定义一个一维数组
					  int count3=0;
					  while(count3<10000) {
						  nums3[count3]=(int)(Math.random()*100);//产生100以内的随机数给nums
						  count3++;
					  }
					  //冒泡排序
					  //冒泡排序
						for (int i = 0; i < nums.length - 1; i++) {// 外层循环控制排序趟数
							for (int j = 0; j < nums.length - 1 - i; j++) {// 内层循环控制每一趟排序多少次
								if (nums[j] > nums[j + 1]) {
									int temp = nums[j];
									nums[j] = nums[j + 1];
									nums[j + 1] = temp;
								}
							}
						}
					  System.out.println("数据规模为"+nums3.length+"时");//数组长度
					  System.out.println("排序后序列为:");
					  for (int i = 0; i < nums3.length; i++) {   //循环并打印出每个数组的数字
					   System.out.print(nums3[i]+"\t") ;
					   }
					  double end3 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
					  double time3 = end3 - begin3;// 程序的运行时间		
					  System.out.println("\n排序所花平均时间(ms):"+time3 / 60*1000 );
//数据规模为100000时
					  double begin4 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
						int[] nums4 = new int[100000];  //定义一个一维数组
						  int count4=0;
						  while(count4<100000) {
							  nums4[count4]=(int)(Math.random()*100);//产生100以内的随机数给nums
							  count4++;
						  }
						  //冒泡排序
						 
							for (int i = 0; i < nums.length - 1; i++) {// 外层循环控制排序趟数
								for (int j = 0; j < nums.length - 1 - i; j++) {// 内层循环控制每一趟排序多少次
									if (nums[j] > nums[j + 1]) {
										int temp = nums[j];  //temp是用于交换时的临时变量
										nums[j] = nums[j + 1];
										nums[j + 1] = temp;
									}
								}
							}
						  System.out.println("数据规模为"+nums4.length+"时");//数组长度
//						  System.out.println("排序后序列为:");
//						  for (int i = 0; i < nums4.length; i++) {   //循环并打印出每个数组的数字
//						   System.out.print(nums4[i]+"\t") ;
//						   }
						  double end4 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
						  double time4 = end4 - begin4;// 程序的运行时间		
						  System.out.println("\n排序所花平均时间(ms):"+time4 / 60*1000 );
		
	}
	
	
//选择排序
	private static void select() {  
		// TODO Auto-generated method stub
		//数据规模为10时
		double begin = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
		int[] nums = new int[10];  //定义一个一维数组
		  int count=0;
		  while(count<10) {
		   nums[count]=(int)(Math.random()*100);//产生100以内的随机数给nums
		   count++;
		  }
		  //选择排序
		  for(int i = 0; i < nums.length-1; ++i){  //外层循环数组寻找最小的数
	            int k = i;
	            for(int j = i; j < nums.length; ++j){  //内层循环,做比较
	                if(nums[k] > nums[j]){  //若j比k小,则把j放入前面的位置
	                    k = j;
	                }
	            }
	            if(k != i){  //交换元素
	                int temp = nums[i];  //temp是用于交换时的临时变量
	                nums[i] = nums[k];
	                nums[k] = temp;
	            }
	        }
		  System.out.println("数据规模为"+nums.length+"时");//数组长度
		  System.out.println("排序后序列为:");
		  for (int i = 0; i < nums.length; i++) {   //循环并打印出每个数组的数字
		   System.out.print(nums[i]+"\t") ;
		   }
		  double end = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
		  double time = end - begin;// 程序的运行时间		
		  System.out.println("\n排序所花平均时间(ms):"+time / 60*1000 );
		  
//数据规模为100时	  
		  double begin1 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
			int[] nums1 = new int[100];  //定义一个一维数组
			  int count1=0;
			  while(count1<100) {
			   nums1[count1]=(int)(Math.random()*100);//产生100以内的随机数给nums
			   count1++;
			  }
			  //选择排序
			  for(int i = 0; i < nums1.length-1; ++i){  //外层循环数组寻找最小的数
		            int k = i;
		            for(int j = i; j < nums1.length; ++j){  //内层循环,做比较
		                if(nums1[k] > nums1[j]){  //若j比k小,则把j放入前面的位置
		                    k = j;
		                }
		            }
		            if(k != i){  //交换元素
		                int temp = nums1[i];  //temp是用于交换时的临时变量
		                nums1[i] = nums1[k];
		                nums1[k] = temp;
		            }
		        }
			  System.out.println("数据规模为"+nums1.length+"时");//数组长度
			  System.out.println("排序后序列为:");
			  for (int i = 0; i < nums1.length; i++) {   //循环并打印出每个数组的数字
			   System.out.print(nums1[i]+"\t") ;
			   }
			  double end1 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
			  double time1 = end1 - begin1;// 程序的运行时间		
			  System.out.println("\n排序所花平均时间(ms):"+time1 / 60*1000 );
			  
//数据规模为1000时
			  double begin2 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
				int[] nums2 = new int[1000];  //定义一个一维数组
				  int count2=0;
				  while(count2<1000) {
					  nums2[count2]=(int)(Math.random()*100);//产生100以内的随机数给nums
					  count2++;
				  }
				  //选择排序
				  for(int i = 0; i < nums2.length-1; ++i){  //外层循环数组寻找最小的数
			            int k = i;
			            for(int j = i; j < nums2.length; ++j){  //内层循环,做比较
			                if(nums2[k] > nums2[j]){  //若j比k小,则把j放入前面的位置
			                    k = j;
			                }
			            }
			            if(k != i){  //交换元素
			                int temp = nums2[i];  //temp是用于交换时的临时变量
			                nums2[i] = nums2[k];
			                nums2[k] = temp;
			            }
			        }
				  System.out.println("数据规模为"+nums2.length+"时");//数组长度
				  System.out.println("排序后序列为:");
				  for (int i = 0; i < nums2.length; i++) {   //循环并打印出每个数组的数字
				   System.out.print(nums2[i]+"\t") ;
				   }
				  double end2 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
				  double time2 = end2 - begin2;// 程序的运行时间		
				  System.out.println("\n排序所花平均时间(ms):"+time2 / 60*1000 );
//数据规模为10000时
				  double begin3 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
					int[] nums3 = new int[10000];  //定义一个一维数组
					  int count3=0;
					  while(count3<10000) {
						  nums3[count3]=(int)(Math.random()*100);//产生100以内的随机数给nums
						  count3++;
					  }
					  //选择排序
					  for(int i = 0; i < nums3.length-1; ++i){  //外层循环数组寻找最小的数
				            int k = i;
				            for(int j = i; j < nums3.length; ++j){  //内层循环,做比较
				                if(nums3[k] > nums3[j]){  //若j比k小,则把j放入前面的位置
				                    k = j;
				                }
				            }
				            if(k != i){  //交换元素
				                int temp = nums3[i];  //temp是用于交换时的临时变量
				                nums3[i] = nums3[k];
				                nums3[k] = temp;
				            }
				        }
					  System.out.println("数据规模为"+nums3.length+"时");//数组长度
					  System.out.println("排序后序列为:");
					  for (int i = 0; i < nums3.length; i++) {   //循环并打印出每个数组的数字
					   System.out.print(nums3[i]+"\t") ;
					   }
					  double end3 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
					  double time3 = end3 - begin3;// 程序的运行时间		
					  System.out.println("\n排序所花平均时间(ms):"+time3 / 60*1000 );
//数据规模为100000时
					  double begin4 = System.currentTimeMillis(); // 程序开始时间,调用系统的当前时间
						int[] nums4 = new int[100000];  //定义一个一维数组
						  int count4=0;
						  while(count4<100000) {
							  nums4[count4]=(int)(Math.random()*100);//产生100以内的随机数给nums
							  count4++;
						  }
						  //选择排序
						  for(int i = 0; i < nums4.length-1; ++i){  //外层循环数组寻找最小的数
					            int k = i;
					            for(int j = i; j < nums4.length; ++j){  //内层循环,做比较
					                if(nums4[k] > nums4[j]){  //若j比k小,则把j放入前面的位置
					                    k = j;
					                }
					            }
					            if(k != i){  //交换元素
					                int temp = nums4[i];  //temp是用于交换时的临时变量
					                nums4[i] = nums4[k];
					                nums4[k] = temp;
					            }
					        }
						  System.out.println("数据规模为"+nums4.length+"时");//数组长度
//						  System.out.println("排序后序列为:");
//						  for (int i = 0; i < nums4.length; i++) {   //循环并打印出每个数组的数字
//						   System.out.print(nums4[i]+"\t") ;
//						   }
						  double end4 = System.currentTimeMillis(); // 程序结束时间,调用系统当前时间
						  double time4 = end4 - begin4;// 程序的运行时间		
						  System.out.println("\n排序所花平均时间(ms):"+time4 / 60*1000 );
 
		
	}


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wyn_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值