当前位置:首页 > 开发 > 编程语言 > 算法 > 正文

Java排序算法之冒泡排序

发表于: 2014-06-21   作者:beijishiqidu   来源:转载   浏览次数:
摘要: 冒泡排序算法的基本思想是:首先将第n-1个记录的关键字和第n个记录的关键字进行比较,若为“逆序”(即L.r[n].key<L.r[n-1].key),则将两个记录交换之,然后比较第n-2个记录和第n-1个记录的关键字。依次类推,直至第1个记录的关键字和第2个记录的关键字比较过为止。这是第一趟起泡排序,其结果是使得关键字最小的记录被安置到第一个记录的位置上;然后进行第二趟起泡排序,对后面的n-
冒泡排序算法的基本思想是:首先将第n-1个记录的关键字和第n个记录的关键字进行比较,若为“逆序”(即L.r[n].key<L.r[n-1].key),则将两个记录交换之,然后比较第n-2个记录和第n-1个记录的关键字。依次类推,直至第1个记录的关键字和第2个记录的关键字比较过为止。这是第一趟起泡排序,其结果是使得关键字最小的记录被安置到第一个记录的位置上;然后进行第二趟起泡排序,对后面的n-1个记录进行同样的操作,其结果是使关键字次小的记录被安置到第2个记录的位置;一般地,第i趟起泡排序是从L.r[n] 到L.r[i]依次比较相邻两个记录的关键字,并在“逆序”时交换相邻记录,其结果是这n-i+1个记录中关键字最小的记录被交换到第i的位置上。整个排序过程需要进行K(1≤k<n)趟起泡排序,显然,判别起泡排序结束的条件应该是“在一趟排序过程中没有进行过交换记录的操作”。

    以下是冒泡排序的JAVA代码实现:

package com.fit.bubble.sort;

public class BubbleSort {

	/**
	 * 首先将第n-1个记录的关键字和第n个记录的关键字进行比较,若为“逆序”(即L.r[n].key<L.r[n-1].key),则将两个记录交换之,
	 * 然后比较第n-2个记录和第n-1个记录的关键字。依次类推,直至第1个记录的关键字和第2个记录的关键字比较过为止。这是第一趟起泡排序,
	 * 其结果是使得关键字最小的记录被安置到第一个记录的位置上
	 * ;然后进行第二趟起泡排序,对后面的n-1个记录进行同样的操作,其结果是使关键字次小的记录被安置到第2个记录的位置
	 * ;一般地,第i趟起泡排序是从L.r[n]
	 * 到L.r[i]依次比较相邻两个记录的关键字,并在“逆序”时交换相邻记录,其结果是这n-i+1个记录中关键字最小的记录被交换到第i的位置上
	 * 。整个排序过程需要进行K(1≤k<n)趟起泡排序,显然,判别起泡排序结束的条件应该是“在一趟排序过程中没有进行过交换记录的操作”
	 * 
	 * @param array
	 */
	public static void sort(int[] array) {

		int length = array.length;
		int temp = 0;

		for (int i = 0; i < length; i++) {
			for (int j = i; j < length - 1; j++) {
				//print(array);
				if (array[j] > array[j + 1]) {
					temp = array[j + 1];
					array[j + 1] = array[j];
					array[j] = temp;
				}
			}
			//System.out.println("-----------------------");
			print(array);
		}

	}

	public static void print(int[] array) {
		StringBuffer sb = new StringBuffer("[");
		for (int i = 0; i < array.length; i++) {
			if (i < array.length - 1) {
				sb.append(array[i]).append(",");
			} else {
				sb.append(array[i]);
			}
		}

		sb.append("]");

		System.out.println(sb);
	}

	public static void main(String[] args) {
		int[] array = new int[] { 54, 3, 11, 34, 12, 8, 19 };

		print(array);

		System.out.println("=====================");

		sort(array);

		print(array);
	}
}

运行结果如下:
[54,3,11,34,12,8,19]
=====================
[3,11,34,12,8,19,54]
[3,11,12,8,19,34,54]
[3,11,8,12,19,34,54]
[3,11,8,12,19,34,54]
[3,11,8,12,19,34,54]
[3,11,8,12,19,34,54]
[3,11,8,12,19,34,54]
[3,11,8,12,19,34,54]

Java排序算法之冒泡排序

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
关于数据结构和算法,有人可能回觉得很难,还有人觉得工作中用不到.其实简单的数据结构和算法不难,对
一、原理 (1)比较相邻的两个元素。如果第一个比第二个大,就交换他们。 (2)对每一对相邻元素作
Java:快速排序算法与冒泡算法 首先看下,冒泡排序算法与快速排序算法的效率: /** * * @<span styl
int main() { int a[10] = {3,2,1,6,5,4,7,8,9,0}; int i,j,k; int temp; for(i = 1; i < 10; i+
冒泡排序为一种稳定的排序算法,时间复杂度为O(n2),空间复杂度为O(1) 选择排序在冒泡排序的基础上
从事PHP工作已经有二年多了,在从事PHP工作中发现要自己去使用基础算法的情况很少,大多数是使用别
/** * 冒泡算法 复杂度:N^2 * 原理:相邻两个元素比较,大的一个后移 * 比如:站一排的士兵,从左第
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 算法原理 冒泡排序
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 算法原理 冒泡排序
前言:   这两天研究排序的算法,算法理解起来比较抽象,不拿笔划着走着就容易绕进去,所以就想出了以
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号