publicclassBubbleSort{ publicstaticvoidmain(String[] args){ //创建80000个数据的数组 int [] arr1 = newint[80000]; Random random = new Random(); for(int i = 0; i < 80000; i ++){ arr1[i] = random.nextInt(8000000)+1;//生成(0,8000000的数) }
//记录排序前的时间 Date date = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateStr = simpleDateFormat.format(date); System.out.println("排序前的时间:"+ dateStr); //测试冒泡程序 int[] ints = bubbleSort(arr1); System.out.println(Arrays.toString(ints));//输出执行结果 //执行完后的时间 Date date1 = new Date(); String dateStr1 = simpleDateFormat.format(date1); System.out.println("排序后的时间:"+ dateStr1); } //将冒泡排序算法封装成一个方法 publicstaticint[] bubbleSort(int[] arr1) { int temp = 0; int [] arr = arr1; boolean flag = false;//表示是否进行过交换 for (int i = 0; i < arr.length - 1; i++) { for (int j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { flag = true;//如果进来过则说明进行了排序 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } if (flag == false) { //说明在一趟排序中一次交换都没有发生 break; } else { flag = false;//重置flag,进行下一趟排序 } } return arr; } }
publicstaticvoidquikSort(int[] arr,int left,int right){ //中轴值 int l = left; int r = right; int pivot = arr[ (l + r) / 2]; //让比pivot小的值放到左边 //比pivot大的 值放到右边 int temp = 0; while( l < r){
} //分+合的方法 publicstaticvoidmergeSort(int[] arr, int left, int right, int[] temp){ if(left < right){ int mid = (left + right)/2; //向左递归进行分解 mergeSort(arr,left,mid,temp); //向右递归进行分解 mergeSort(arr,mid+1,right,temp); //到合并 merge(arr,left,mid,right,temp); } }
//合并的方法 publicstaticvoidmerge(int[] arr,int left,int mid,int right,int[] temp){ int l = left;//初始化i,表示左边有序序列的初始索引 int r = mid + 1;//表示右边有序序列的初始索引 int t = 0;//依次指向temp的索引