各种排序算法:
冒泡排序,选择排序,插入排序,稀尔排序,快速排序,归并排序,堆排序,桶式排序,基数排序
冒泡排序(Bubble Sort)
1. 基本思想:
两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
2. 排序过程:
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上"漂浮",如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。
【示例】:
49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97
java代码实现:
/**
* 冒泡排序:
* 执行完一次内for循环后,最小的一个数放到了数组的最前面,相邻位置之间交换
* @author TSW
*
*/
public class BubbleSort {
public static void main(String[] args) {
Integer[] intgArr = { 7, 2, 4, 3, 12, 1, 9, 6, 8, 5, 11, 10 };
BubbleSort bubblesort = new BubbleSort();
bubblesort.bubble(intgArr, 0, intgArr.length - 1);
for (Integer intObj : intgArr) {
System.out.print(intObj + " ");
}
}
/**
* 排序算法的实现,对数组中指定的元素进行排序
* @param array 待排序的数组
* @param from 从哪里开始排序
* @param end 排到哪里
*/
public void bubble(Integer[] array, int from, int end) {
// 需 array.length - 1 轮比较
for (int k = 1; k < end - from + 1; k++) {
// 每轮循环中从最后一个元素开始向前起泡,直到i=k止,即i等于轮次止
for (int i = end - from; i >= k; i--) {
// 按照一种规则(后面元素不能小于前面元素)排序
if ((array[i].compareTo(array[i - 1])) < 0) {
// 如果后面元素小于了(当然是大于还是小于要看比较器实现了)前面的元素,则前后交换
swap(array, i, i - 1);
}
}
}
}
/**
* 交换数组中的两个元素的位置
* @param array 待交换的数组
* @param i 第一个元素
* @param j 第二个元素
*/
public void swap(Integer[] array, int i, int j) {
if (i != j) {// 只有不是同一位置时才需交换
Integer tmp = array[i];
array[i] = array[j];
array[j] = tmp;
}
}
}
另外一种实现方式:
/**
* 冒泡排序:执行完一次内for循环后,最大的一个数放到了数组的最后面。相邻位置之间交换
*/
public class BubbleSort2 {
public static void main(String[] args) {
int[] a = { 3, 5, 9, 4, 7, 8, 6, 1, 2 };
BubbleSort2 bubble = new BubbleSort2();
bubble.bubble(a);
for (int num : a) {
System.out.print(num + " ");
}
}
public void bubble(int[] a) {
for (int i = a.length - 1; i > 0; i--) {
for (int j = 0; j < i; j++) {
if (new Integer(a[j]).compareTo(new Integer(a[j + 1])) > 0) {
swap(a, j, j + 1);
}
}
}
}
public void swap(int[] a, int x, int y) {
int temp;
temp = a[x];
a[x] = a[y];
a[y] = temp;
}
}
分享到:
相关推荐
本文将详细探讨标题所提及的几种排序算法:合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合Java语言的实现进行解析。 1. **合并排序(Merge Sort)**: 合并排序是一种基于分治策略的排序算法...
综上所述,"C#-基于C#实现的冒泡排序算法-Bubble-Sort.zip"文件内容涉及了C#编程语言的基本语法、控制结构、数组操作,以及冒泡排序算法的实现与优化。这些知识是软件开发人员尤其是初学者需要掌握的基础技能。通过...
本篇我们将深入探讨TIA博途SCL语言中的冒泡排序算法,并介绍如何创建一个全局函数块(FC)库,实现升序或降序的排序功能。 冒泡排序是一种简单但效率较低的排序算法,它的基本思想是通过重复遍历待排序的序列,比较...
经典排序算法 - 冒泡排序Bubble sort 经典排序算法 - 选择排序Selection sort 经典排序算法 - 鸡尾酒排序Cocktail sort 经典排序算法 - 希尔排序Shell sort 经典排序算法 - 堆排序Heap sort序 经典排序算法 - ...
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换的元素,也就是说该数列已经...
1. 冒泡排序(Bubble Sort): 冒泡排序是最简单的排序算法之一,通过不断地交换相邻两个元素的位置,使较大的元素逐渐“浮”到数组的末尾。时间复杂度为O(n^2)。在Java中,冒泡排序可以表示为: ```java void ...
冒泡排序(Bubble Sort)是一种简单的排序算法,其工作原理是通过重复地遍历待排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列...
冒泡排序(Bubble Sort)是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就交换位置。这个过程持续对数列的末尾进行,直到整个数列都排序完成。 冒泡排序的工作原理是通过...
冒泡排序(Bubble Sort)是一种简单的排序算法,通过反复遍历要排序的数列,比较相邻的两个元素,并交换它们以达到排序的目的。本文将详细介绍冒泡排序的算法思路、实现代码和优缺分析。 冒泡排序算法思路: 冒泡...
通过分析`第25讲-Bubble Sort-冒泡排序算法.sb2`文件,你可以学习到如何在Scratch2环境中实现冒泡排序,这对于初学者来说是一个很好的实践项目,能够帮助他们深入理解排序算法的逻辑。同时,Scratch2的可视化编程...
本文将详细介绍几种经典的排序算法,并提供Java语言的实现代码,包括冒泡排序、插入排序、选择排序和快速排序。这些算法不仅在面试中常被考察,而且在实际开发中也有广泛应用。 1. **冒泡排序(Bubble Sort)**: ...
Java作为一种广泛应用的编程语言,提供了多种实现排序算法的方式。本资源"各种排序算法java实现"聚焦于将这些算法用Java代码来具体展示,对于学习和理解算法有着极大的帮助。 在Java中,我们通常会接触到以下几种...
根据提供的文件信息,我们可以归纳总结出以下几个主要的排序算法及其JAVA代码实现: ### 1. 插入排序(Insert Sort) 插入排序是一种简单的排序方法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序...
这个名为"Java各种排序算法代码.zip"的压缩包包含了一系列实现不同排序算法的Java源代码。排序算法是计算机科学中的基本概念,用于对一组数据进行排列。下面将详细讨论这些算法及其在Java中的实现。 1. 冒泡排序...
本资源包含了多种经典的排序算法实现,包括选择排序、冒泡排序、希尔排序、插入排序和归并排序。下面将详细介绍这些排序算法及其原理。 1. **选择排序(Selection Sort)** - **基本思想**:每次遍历数组,找到...
1. **冒泡排序(Bubble Sort)**:这是一种简单的交换排序,通过重复遍历数组,比较相邻元素并根据需要交换它们,直到没有任何一对数字需要交换。Java中实现冒泡排序的基本思路是使用两个嵌套循环,外层循环控制排序...
在C语言环境下,快速排序.c、insert_sort.c、select_sort.c和maopao_sort.c这四个文件分别对应快速排序、插入排序、选择排序和冒泡排序的源代码实现,读者可以通过阅读和学习这些代码来加深对这些排序算法的理解。
插入排序通过将每个元素插入到已排序的序列中的正确位置来实现排序。对于小规模或部分有序的数据,插入排序表现较好,但其平均和最坏情况下的时间复杂度也是O(n^2)。 **4. 合并排序(Merge Sort)** 合并排序是基于...