冒泡排序
冒泡排序思路:
通过比较和交换
从开头对相邻的两个数据进行比较
如果前面的数据大于后面的数据,则交换位置,经过一轮比较后,最大的数据就放在了最后面
依次遍历整个数据,把所有的数据排序
时间复杂度:O(n^2) 最好情况:O(n) 最坏情况:O(n^2)
空间复杂度:O(1)
稳定性:稳定
复杂性:简单
Java实现
package com.wangjun.arithmetic;
import java.util.Arrays;
/**
* 冒泡排序
*
* @author wangjun
* @email scuwangjun@hotmail.com
* @time 2018年4月5日 下午7:15:13
*/
public class SortBubble {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = { 3, 1, 2, 4, 5, 6, 3, 1, 2, 4, 3};
doBubble(arr);
System.out.println(Arrays.toString(arr));
}
/*
* 冒泡排序的实现
* 从小到大,冒到最后面
* 第一个for循环次数,可以理解每个i的值是每次遍历最大值放的位置 第二个for进行冒泡交换
*/
public static void doBubble(int[] arr) {
int len = arr.length;
for(int i = 0; i < len; i++) {
boolean isChange = false;
for(int j = 0; j < len - i - 1; j++) {
if(arr[j] > arr[j+1]) {
arr[j] = arr[j] + arr[j+1];
arr[j+1] = arr[j] - arr[j+1];
arr[j] = arr[j] - arr[j+1];
isChange = true;
}
}
if(!isChange) {
break;
}
}
}
/*
* 冒到最前面
*/
public static void doBubble2(int a[]) {
int temp;
int count = 0;
for (int i = 0; i < a.length - 1; i++) {
for (int j = i + 1; j < a.length; j++) {
if (a[i] > a[j]) {
temp = a[j];
a[j] = a[i];
a[i] = temp;
count++;
}
}
}
System.out.println(count);
}
}
Last updated