题目
给定一个按非递减顺序排序的整数数组 A
,返回每个数字的平方组成的新数组,要求也按非递减顺序排序。
一般冒泡排序算法实现:
/**
* 冒泡排序一般算法
* 时间复杂度:O(n*n)
*/
public int[] bubsort(int[] arr) {
for(int i = 0;i < arr.length;i++) {
arr[i] = arr[i]*arr[i];
}
int temp;
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j+1] < arr[j]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
return arr;
}
冒泡排序算法优化:
优化思路:对序列排序的完成情况进行判断,若已完成,则跳出循环。
/**
* 优化后冒泡排序
* 思路:通过一个布尔变量判断当前顺序是否已经排列完成
* 排列完成的标志:一次内层循环冒泡中,没有发生变量值交换操作
*/
public static int[] opt_bubsort(int[] arr) {
for(int i = 0;i < arr.length;i++) {
arr[i] = arr[i]*arr[i];
}
boolean mark = true;
while(mark) {
mark = false;
int temp;
for(int i=0;i<arr.length-1;i++) {
for(int j=0;j<arr.length-1-i;j++) {
if(arr[j+1] < arr[j]) {
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
mark = true;
}
}
if(mark == false)
break; //内层循环没有交换记录,证明排序完毕
}
}
return arr;
}