一 冒泡排序算法
1 相邻元素两两比较,大的放后面,第一次完毕,最大值在最大索引处
2 java代码实现
public static void bubbleSort(int[] arr)
{
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])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
location = j;
}
}
}
二 代码优化
1 当某一趟遍历没有交换,就说明已经遍历好了,就不用再迭代了
public static void sort(int[] arr)
{
int flag; // 标记
for(int i=0; i<arr.length-1; i++)
{
flag = 1; // 每一次迭代标记为1
for(int j=0; j<arr.length-i-1; j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = 0; // 如果有次序交换,标记为0
}
}
if(flag == 1) // 没有次序交换,排序完成
break;
}
}
2 记录每次遍历数据之后交换次序的位置,显然这个位置之后的数据已经有序了不用再排序了。因此通过记录最后发生数据交换的位置就可以确定下次循环的范围了。
public static void sort(int[] arr)
{
int location; // 标记
int n = arr.length - 1; // 初始化最后交换位置为最后一个元素
for(int i=0; i<arr.length-1; i++)
{
location = n; // 记录最后发生交换的位置
for(int j=0; j<location; j++)
{
if(arr[j] > arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
n = j; // 记录无序位置的结束 ,有序从j+1位置开始
}
}
if(n == location) // 没有次序交换,排序完成
break;
}
}
冒泡排序java实现及优化
最新推荐文章于 2023-08-30 16:43:07 发布