基本算法--冒泡排序

无人不知无人不晓的冒泡排序,据说是模仿泡泡从水中浮起跑到水面的过程。来看一下代码:

package cn.songxinqiang.study.algorithm.sort;

import java.util.Arrays;

/**
 * 冒泡排序
 *
 * <p>
 * 众里寻她千百度, 蓦然回首, 那人却在灯火阑珊处.
 * </p>
 * 
 * @author 阿信sxq-2015年7月16日
 *
 */
public class BubbleSort {

    /**
     * 原理:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:
     * 每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
     *
     * @author 阿信sxq-2015年7月16日
     *
     * @param args
     */
    public static void main(String[] args) {
        int a[] = { 49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17,
                18, 23, 34, 15, 35, 25, 53, 51 };
        int temp = 0;
        for (int i = 0; i < a.length - 1; i++) {
            for (int j = 0; j < a.length - 1 - i; j++) {
                if (a[j] > a[j + 1]) {
                    temp = a[j];
                    a[j] = a[j + 1];
                    a[j + 1] = temp;
                }
            }
        }

        System.out.println(Arrays.toString(a));

    }

}

输出为:

[4, 5, 12, 13, 15, 17, 18, 23, 25, 27, 34, 34, 35, 38, 49, 49, 51, 53, 54, 56, 62, 64, 65, 76, 78, 97, 98, 99]

冒泡排序比较简单,但是也比较浪费时间,在此基础上有很多改良的排序方法,后面博客中说明

时间: 2024-11-05 18:32:25

基本算法--冒泡排序的相关文章

经典排序算法 - 冒泡排序Bubble sort

 原文出自于 http://www.cnblogs.com/kkun/archive/2011/11/23/bubble_sort.html 经典排序算法 - 冒泡排序Bubble sort 原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换, 这样一趟过去后,最大或最小的数字被交换到了最后一位, 然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子 例子为从小到大排序, 原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 | 第一趟排序(外循环) 第

排序算法—冒泡排序

*/--> 排序算法-冒泡排序 Table of Contents 1 问题描述 2 冒泡排序(Bubble) 2.1 冒泡排序(一) 2.2 冒泡排序(二) 2.3 冒泡排序(三) 2.4 冒泡排序(四) 3 阅读参考 1 问题描述 引子 排序是数据结构中十分重要的一章,排序算法有很多种,一直没时间整理而且很多排序算法理解的也不是很透彻.希望通过这次整理吃透吧! 排序算法十分多,故分篇进行整理. 说明 本文重点是理解排序算法,而不是完整的程序,所以每节都只有具体排序算法的接口.没有完整的源代码

啊哈算法-冒泡排序

下面介绍的是啊哈算法的冒泡排序算法: #include <stdio.h> int main() { int a[100], i, j, t, n; scanf("%d", &n); for (i = 1; i <= n; i++) scanf("%d", &a[i]); for (i=1; i<= n-1; i++) { for (j=1; j<=n-i; j++) { if (a[j] < a[j+1]) {

算法--冒泡排序

冒泡排序是一种极其简单的排序算法. WHY? 因为他的思路是这样的:每两个数比较,大的就往后. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 1 #include <iostream> 2 using namespace std; 3 int main(){ 4 int a; 5 while(cin>>a){ 6 int b[a+1]; 7 int i=1;

C语言中的排序算法--冒泡排序,选择排序,希尔排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端 维基百科:点击打开链接 [cpp] view plain copy /* 用选择法对10个数进行排序 */ #include<stdio.h> void main() { int i,j,

算法-冒泡排序和快速排序(Object-C)

冒泡和递归一样,不管大家水平怎么样,基本上都能凑合的写写,快速排序其实主要的也是数据的交换,都算是交换排序,不过快排需要了解分治思想,实现的时候需要递归一下,导致很多时候看快排的时候都看的云里雾里.假设有一个无序的整型数组 索引  0     1     2    3     4      5     6 数值  15   32    8    99   12  17  36, ①取出0位的15作为基准值,然后倒序从后往前找小于15的,将12赋值给0位: ②从前往后找大于15的将32放置到位置4

三个典型的经典算法冒泡排序,插入排序,选择排序

稍微轻松点,彻底理解了一下这三个算法,当然只是部分,还有什么改良版,具体分类等等,不过下周有事,先把这几个典型的弄明白,老规矩,看代码说问题 /** * Created by fanyafeng on 2015/5/8/0008. */ public class ALGTest { public static void main(String[] args) { System.out.println("排序算法"); System.out.println("---------

白话排序算法--冒泡排序

前言: 这两天研究排序的算法,算法理解起来比较抽象,不拿笔划着走着就容易绕进去,所以就想出了以体育课排队列的方式进行演示 系列的其他篇章的情景同上 冒泡排序:  重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该 数列已经排序完成. 情景描述: 体育课上,老师需要一个纵列(从低到高竖着站一排),集合的时候大家随便凑了一列,但是高低不齐,一共6个人这时老师说,我给你们个办法,按照我的办法,你们自己排列队形. 从第

经典排序算法——冒泡排序

对于一个int数组,请编写一个冒泡排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: 输入数组:[1,2,3,5,2,3],6 输出数组:[1,2,2,3,3,5] class BubbleSort { public: int* bubbleSort(int* A, int n) { // write code here bool flag=true; for(int i=0;i<n && flag;++i) { for(int j=n-

排序算法-冒泡排序(改),选择排序

上次说冒泡排序留下2个问题,一个是选择排序,一个是冒泡排序性能,这次会先说选择排序,然后说冒泡排序的优化 一选择排序 选择排序是一种简单直观的排序算法.它的工作原理是每一次从待排序的元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 流程: (有小到大排序) 第一轮 将0位元素与后续所有元素比较,将小的元素放在0位 第二轮 将1位元素与后续所有元素比较,将小的元素放在1位 ... 直到最后一位 代码上次已经贴出,这里复制下 1 public static vo