数据结构对于一个程序员来说是最基本的基础。要想写出漂亮的代码那么数据结构是必须要关的,作为一名程序员如果不了解数据结构,那么你注定会是一辈子的低级码农。我先从基本的排序开始介绍一系列数据结构和基本算法。
冒泡排序
冒泡排序原理
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序图示
代码:MaoPaoSort.java
package com.yunju.maopao;
import java.util.Arrays;
import com.yunju.util.ArrayUtil;
import com.yunju.util.GenericDataUtil;
import com.yunju.util.SwapUtil;
public class MaoPaoSort {
public static void main(String[] args) {
int[] list = GenericDataUtil.genericData(100000);
// ArrayUtil.printArray(list);
long start = System.currentTimeMillis();
maoPaoSort(list, list.length);
long end = System.currentTimeMillis();
// ArrayUtil.printArray(list);
System.out.println("\n冒泡排序花费时间:" + (end - start));
int[] list1 = GenericDataUtil.genericData(100000);
long start1 = System.currentTimeMillis();
Arrays.sort(list1);
long end1 = System.currentTimeMillis();
System.out.println("快速排序花费时间:" + (end1 - start1));
}
// 对数据进行冒泡排序
public static void maoPaoSort(int[] list, int length) {
for (int i = 0; i < length - 1; i++) {
for (int j = length - 1; j > i; j--) {
if (list[j] > list[i]) {
SwapUtil.swap(list, j, i);
}
}
}
}
}
工具类代码:GenericDataUtil.java(生成数据)
package com.yunju.util;
public class GenericDataUtil {
/**
* 生成随机的整数
* @param number
* @return
*/
public static int[] genericData(int number,int random) {
int[] list=new int[number];
for(int i=0;i<number;i++) {
list[i] = (int)Math.round(Math.random()*random);
}
return list;
}
public static int[] genericData(int number) {
return genericData(number, 100000);
}
}
工具类代码:SwapUtil.java(交换数据)
package com.yunju.util;
public class SwapUtil {
/**
* 实现数据交换
* @param i
* @param j
*/
public static void swap(int[] list, int i, int j) {
int temp;
temp=list[j];
list[j]=list[i];
list[i]=temp;
}
/**
* 将其交换为升序的正向排列的数组
* @param list
* @param i
* @param j
* @param k
*/
public static void swap3(int[] list, int i, int j,int k) {
if(list[i]>list[j])
swap(list, i, j);
if(list[i]>list[k])
swap(list, i, k);
if(list[j]>list[k])
swap(list, k, j);
}
}
工具类代码:ArrayUtil.java(打印数据)
package com.yunju.util;
public class ArrayUtil {
public static void printArray(int[] array) {
System.out.println();
for (int i = 0; i < array.length; i++) {
System.out.print(+array[i]+",");
}
}
}
冒泡排序时间复杂度为:O(n^2)效率是很低的
执行结果: