Algorithm-排序算法-冒泡排序

冒泡排序是比较简单的一种排序算法,该算法核心思想是循环遍历队列,将队列中大的元素后移,然后最大的元素像冒泡一样被推送到队列的顶部。

算法描述

  1. 比较待排序队列中相邻的两个元素,如果前一个元素大于后一个元素,则交换两个元素的位置;
  2. 对队列中所有相邻的元素重复步骤1中的操作,遍历一遍后,最大的元素会被交换到队列的顶端;
  3. 除了被交换到最后的最大元素,其他未完成排序的元素重复步骤2。同理会将次最大的元素交换到未排序元素的队列顶端;
  4. 重复以上步骤,知道排序完成。

动态演示

算法实现

1.冒泡排序

package com.lreis.algorithm.sort;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.List;

import com.alibaba.fastjson.JSONArray;

/**
 * 冒牌排序算法
 */
public class BubbleSort {

	public void sort(List<Integer> items) {
		if (items == null || items.isEmpty())
			return;
		int len = items.size();
		for (int i = 0; i < len - 1; i++) {
			// 每趟可以完成一个元素的排序
			for (int j = 0; j < len - 1 - i; j++) {
				if (items.get(j) > items.get(j + 1)) {
					int temp = items.get(j);
					items.set(j, items.get(j+1));
					items.set(j + 1, temp);
				}
			}
		}
	}

	public static List<Integer> items;
	static {
		loadData("D:\\data.txt");
	}

	public static void loadData(String fileName) {
		File file = new File(fileName);
		BufferedReader br = null;
		try {
			br = new BufferedReader(new FileReader(file));
			StringBuffer buffer = new StringBuffer();
			String line = null;
			while ((line = br.readLine()) != null) {
				buffer.append(line);
			}
			items = JSONArray.parseArray(buffer.toString(), Integer.class);
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (null != br)
				try {
					br.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
		}

	}

	public static void main(String[] args) {
		BubbleSort instance = new BubbleSort();
		long curtime = System.currentTimeMillis();
		instance.sort(items);
		long inteval = System.currentTimeMillis() - curtime;
		System.out.println("100000个随机数据排序,冒泡排序所需时长:" + inteval + "毫秒");
		//100000个随机数据排序,冒泡排序所需时长:122553毫秒
	}

};

参考文献

1.十大经典排序算法(动图演示)

猜你喜欢

转载自blog.csdn.net/lreis2010/article/details/88355929