[Java]排序算法>交换排序>【冒泡排序】(O(N*N)/稳定/N较小/有序/顺序+链式)

1 冒泡排序

1.1 算法思想

交换排序的基本思想:两两比较待排序记录的关键字,一旦发现2个记录不满足次序要求时,则:进行交换,直到整个序列全部满足要求为止。

1.2 算法特征

  • 属于【交换排序】

  • 适用于【稳定性】:稳定
  • 适用于【规模N】:较小
  • 适用于【有序性】:有序
  • 适用于【存储结构】:顺序存储 or 链式存储(二者均可)
  • 相关口诀:【插冒归堆】好有序,【插冒】记录个数小,【插冒二选】时N方

1.3 算法实现

import java.util.Arrays;

public class BubbleSort {
    public static int [] bubbleSort(int []array){
        int [] resultArray = Arrays.copyOfRange(array, 0, array.length);

        for(int i=0;i<array.length-1;i++){//趟数
            for(int j=0;j<array.length-1-i;j++){//每一趟内,进行相邻元素的比较:将较大值元素向后移动
                if(resultArray[j]>resultArray[j+1]){
                    int tmp = resultArray[j];
                    resultArray[j] = resultArray[j+1];
                    resultArray[j+1] = tmp;
                }
            }
        }
        return resultArray;
    }
}

1.4 测试实现

import java.util.Scanner;

public class Main {
    public static void print(int[] array){
        if(array==null || array.length<1){
            return;
        }
        for(int i=0;i<array.length-1;i++){
            System.out.print(array[i]+" ");
        }
        System.out.println(array[array.length-1]);
    }

    public static void main(String[] args) {
        //1 输入 一组 乱序的数值 数组
        Scanner scanner = new Scanner(System.in);
        String input = scanner.nextLine();
        String [] strValues = input.trim().split(" ");
        int [] array = new int[strValues.length];
        for(int i=0,len=strValues.length;i<len;i++){
            array[i] = Integer.valueOf(strValues[i]).intValue();//假定所有输入均为合规的整型数值
        }
//        print(array);// test - 输出 所输入的数据

        //2 排序
        int [] sortedArray = BubbleSort.bubbleSort(array);
        //3 输出
        print(sortedArray);
    }
}
//input↓
3 6 5 8 9 4 2 7
//output↓
2 3 4 5 6 7 8 9

1.5 参考文献

  • 《数据结构(C语言-第2版-严蔚敏 吴伟民 著)》:Page241

原文地址:https://www.cnblogs.com/johnnyzen/p/12436117.html

时间: 2024-09-30 06:08:39

[Java]排序算法>交换排序>【冒泡排序】(O(N*N)/稳定/N较小/有序/顺序+链式)的相关文章

java排序算法之 --- 冒泡排序

冒泡排序是我们比较常用的一种排序算法,它的原理是:从头遍历未排好序的序列,每相邻的两个元素进行比较,较大(或较小)的元素放在后面,一轮遍历之后最大(或最小)的元素已经放到最后,然后依次重复之前的步骤把未排好序的序列进行排序,遍历 n-1 轮之后,整个序列就排好序了(第 n 轮不必要,因为第 n-1 轮排序后只剩下最后一个元素).因为这种排序算法每次排好一个元素,就像冒泡一样,所以叫冒泡排序. 举个小例子: arr[] = {6,1,5,3,2,4} 第一趟, 6,1,5,3,2,4  :  1,

Java排序算法之冒泡排序

package?com.xingej.algorithm.sort.bubble; /** ?*?自定义数组类 ?*? ?*?特点是:带有冒泡排序功能 ?*? ?*?冒泡排序核心:1.从数组的最后一个元素,开始比较:2.两两比较,满足条件的话,就需要进行位置的互换 ?*? ?*?实际生活中:小学时,需要根据身高进行座位排序,就可以使用冒泡排序进行. ?*? ?*[email protected]?erjun?2017年12月11日?上午9:20:28 ?*/ public?class?MyArr

排序算法之冒泡排序Java实现

排序算法之冒泡排序 一.初级的冒泡排序 import java.util.Arrays; /** * * @title BubbleSort * @describe 冒泡排序 * @author 张富昌 * @date 2016年10月1日下午3:56:30 */public class BubbleSortLow { // 起泡排序是快速排序的基础,但是排序速度较慢. // 基本思想:将序列中第 1 个元素与第 2 个元素进行比较,如前者大于后者,则两个元素交换位置,否则不交换: // 再将第

排序算法之冒泡排序(Java)

 冒泡排序即每次遍历.相邻数字间进行比较,前者大于后者进行交换,不断将最大值后移,直至沉至最后位置:算法关键要点在于确定每次循环的边界: 后面两种算法则是对冒泡排序一定程度上的改良,但相对于其他排序算法,冒泡排序性能依然较差. //冒泡排序 public class Bubble_Sort { //最原始的解法 public void bubble_sort1(int[] data) { int n = data.length; for(int i = 0; i < n; i++) { //

Java排序算法(一)

Java排序算法(一) 一.排序的基本概念和分类 1.1排序的定义 在<大话数据结构>中,排序定义为,假设含有n个记录的序列为{r1,r2,...,rn},其相应的关键字{k1,k2,...,kn},需确定1,2...n的一种排列p1,p2...pn,是其相应的关键字满足Kp1<=Kp2<=...<=Kpn(非递减或非递增)关键,即使得序列称为一个按关键字有序的序列{rp1,rp2...rp3},这样的操作称为排序. 1.2排序的稳定性 假设ki=kj(1<=i<

java基础算法之冒泡排序

接触冒泡算法还是大一了,学习C语言的冒泡算法.现在唯一记得就是冒泡与选择了.出来刚刚工作的时候觉的算法基本没撒用处,现在发现这些都是很好的基础.因此自己也准备重新拾起这些知识. 冒泡排序 泡排序是一种很简单的排序的算法,根据名字就可以知道这一个过程,一点点的把大的数移到顶部. 时间复杂度 若文件的初始状态是正序的,一趟扫描即可完成排序.所需的关键字比较次数 和记录移动次数 均达到最小值:  ,  .所以,冒泡排序最好的时间复杂度为 . 若初始文件是反序的,需要进行 趟排序.每趟排序要进行 次关键

java排序算法(六):直接插入排序

java排序算法(六):直接插入排序 直接插入排序的基本操作就是将待的数据元素按其关键字的大小插入到前面的有序序列中 直接插入排序时间效率并不高,如果在最坏的情况下,所有元素的比较次数的总和为(0+1..n-1)= o(n^2).其他情况下也要考虑移动元素的次数.故时间复杂度是o(n^2) 直接插入空间效率很好,只需要一个缓存数据单元,也就是说空间复杂度是o(1) 直接插入排序是稳定的 直接插入排序在数据以有一定顺序的情况下,效率较好.但如果数据无规则,则需要移动大量的数据.其效率就和冒泡排序和

Java排序算法-Java入门|Java基础课程

Java 排序算法 1. 课程目标 排序是任何语言都会使用到的功能之一,然成果排序的算法有很多,对空间的要求及其时间效率也不尽相同. 本文章以Java语言示例,通过对空间要求.时间效率要求,来对比各种排序算法的使用场景 2.适用对象 Java语言初学者 Java算法爱好者 3.相关概念 3.1 排序概念 排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 3.2 排序算法 排序算法,就是如何使得记录按照要求排列的方法. 排序算法在很多领域得到相当地重视,尤其是在

排序算法之一--冒泡排序,选择排序,插入排序

一.排序算法定义 1.排序算法定义 排序算法是一种能将一串数据依照特定顺序进行排列的一种算法 2.六种排序算法理解方式 想象小时候老师给我们按照身高进行排队时用到的方法,脑子里面要浮现老师排身高的场面   以从矮到高进行排序为例 3.稳定性的定义 一个排序算法是稳定的,当有两个相等键值的纪录R和S,且在原本的列表中R出现在S之前,在排序过的列表中R也将会是在S之前. 二.三种基本排序算法 1.冒泡排序:"移" 把最高的移到最右边 第一次循环,找到最高的那个人放到最右边       方法