冒泡排序+优化
优化思想:在一次冒泡中,当没有数据交换的话,直接突出循环
另外,代码加上了时间复杂度的测试:O(n^2)
package sort;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
public class BubbleSort
{
public static void main(String[] args)
{
// int arr[] = {3, 9, -1, 10, -2};
// int arr[] = {1, 2, 3, 4, 5};
//测试一下冒泡排序的速度(O(n^2)),
//创建一个大数据
int[] arr = new int[80000];
for(int i = 0; i < 80000 ; i++)
{
arr[i] = (int)(Math.random()*8000000); //生成一个[0,8000000]的数字
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate = sdf.format(new Date());
System.out.println("排序前的时间是 : " + strDate);
//测试冒泡排序
bubbleSort(arr);
// System.out.println("排序后的结果 : " + Arrays.toString(arr));
SimpleDateFormat sdf2 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String strDate2 = sdf.format(new Date());
System.out.println("排序后的时间是 : " + strDate2);
}
//将冒泡排序封装成一个方法
public static void bubbleSort(int[] arr)
{
int temp = 0; //标志变量
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)
{
break;
}
else
{
flag = true;
}
}
}
}