package com.example.ljia.Structure.Px;
import java.util.Arrays;
/**
* @ Author :SamLai
* @ Date :Created in 2019-04-11 10:23
* @ Description:冒泡排序
* <p>
* <p>
* 步骤:
* 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
* 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
* 针对所有的元素重复以上的步骤,除了最后一个。
* 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
*
*
* 时间复杂度:
* 排序方式:内部排序
* 空间复杂度:O(1)
* 平均实际复杂度:O(n的平方)
* 最好情况:O(n)
* 最坏情况:O(n的平方)
* 稳定性:稳定
*/
public class Mppx {
public static int[] solution(int[] arr) {
int[] result = Arrays.copyOf(arr, arr.length);
//辅助记录多少个已经排好了的
for (int i = 0; i < result.length - 1; i++) {
// j < result.length - i 这是因为尾部的最大值已经排好了
for (int j = 1; j < result.length - i; j++) {
int prev = result[j - 1];
int next = result[j];
if (prev > next) {
int temp = prev;
result[j - 1] = next;
result[j] = temp;
}
}
}
printArr(result);
return result;
}
public static int[] solutionDx(int[] arr) {
int[] result = Arrays.copyOf(arr, arr.length);
//辅助记录多少个已经排好了的
for (int i = result.length - 1; i > 0; i--) {
//j >= result.length - i 头部的内容已经排好不需要再进行排序 从大到小的操作
for (int j = result.length - 1; j >= result.length - i; j--) {
int prev = result[j - 1];
int next = result[j];
if (prev < next) {
int temp = prev;
result[j - 1] = next;
result[j] = temp;
}
}
}
printArr(result);
return result;
}
private static void printArr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void main(String[] args) {
int[] arr = new int[]{9, 1, 34, 23, 5, 4, 12, 9};
solutionDx(arr);
}
}