冒泡排序:
冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
冒泡排序算法的运作如下:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
public class BubbleSort{
public static void main(String[] args){
int score[] = {67, 69, 75, 87, 89, 90, 99, 100};
for (int i = 0; i < score.length -1; i++){ //最多做n-1趟排序
for(int j = 0 ;j < score.length - i - 1; j++){ //对当前无序区间score[0......length-i-1]进行排序(j的范围很关键,这个范围是在逐步缩小的)
if(score[j] < score[j + 1]){ //把小的值交换到后面
int temp = score[j];
score[j] = score[j + 1];
score[j + 1] = temp;
}
}
System.out.print("第" + (i + 1) + "次排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
System.out.println("");
}
System.out.print("最终排序结果:");
for(int a = 0; a < score.length; a++){
System.out.print(score[a] + "\t");
}
}
}
插入排序:
不扯太多概念性的东西,简单点来说,插入排序 将数组所有元素划分成了有序区和无序区,假设当前数组有 N 个元素,
开始默认第一个元素(下标为0)所处的位置是有序区,这是局部有序,从第二个元素(i=1)至数组最后一个元素(i=N-1)属于无序区;
假设数组元素是按从左至右存放的,如果用 i 来标记无序区中的第一个元素下标,也就是无序区中最左边或者说是无序区中下标值最小的下标,
则每趟排序是将下标 i 所指向的有效值插入有序区的适当位置,使得每趟排序完成之后,有序区的所有元素总是保持局部有序状态。
按这样来回 N -1 趟插入之后,则 N 个元素已成有序状态。
尽管插入排序的复杂度也是 O(n^2),但一般情况下,插入排序会比冒泡排序快一倍,要比选择排序还要快一点。
排序基类:BaseSort.java
package sort;
/**
* -----------------------------------------
* @文件: BaseSort.java
* @作者: fancy
* @邮箱: fancydeepin@yeah.net
* @时间: 2012-7-18
* @描述: 基类
* -----------------------------------------
*/
public class BaseSort {
protected final static int ASC = 1; // 升序
protected final static int DESC = 0; // 降序
//交换i1、i2下标指向的值
public void swap(Object[] array, int i1, int i2){
Object tempObj;
tempObj = array[i1];
array[i1] = array[i2];
array[i2] = tempObj;
tempObj = null;
}
//打印输出数组元素
public void print(Object[] array){
for(Object obj : array){
System.out.print(obj + " ");
}
System.out.println();
}
}
插入排序:InsertSort.java
package sort;
/**
* -----------------------------------------
* @文件: InsertSort.java
* @作者: fancy
* @邮箱: fancydeepin@yeah.net
* @时间: 2012-7-18
* @描述: 插入排序
* -----------------------------------------
*/
public class InsertSort extends BaseSort{
/**
* @方法名: insertSort
* @参数名: array 排序对象
* @参数名: order 排序顺序
* @描述语: 插入排序:默认第一个是有序,使其余的像纸牌游戏那样依次插入,复杂度 O(n^2)
*/
public void insertSort(Object[] array, int order){
int length = array.length;
if(order == ASC){
for(int i = 1, j; i < length; i++){ //默认第1个(下标0)有序,i是无序区第一个元素下标,第i趟结束后,i下移,如此来回 N -1趟
for(j = 0; j < i; j++){ //将无序区下标为i所指向的值插入有序区适当位置
if(Double.parseDouble(array[j].toString()) > Double.parseDouble(array[i].toString())){
swap(array, i, j);
}
}
System.out.println("--------------------------------------------------------------------------->第" + i + "趟");
print(array);
}
}else if(order == DESC){
for(int i = 1, j; i < length; i++){ //默认第1个(下标0)有序,i是无序区第一个元素下标,第i趟结束后,i下移,如此来回 N -1趟
for(j = 0; j < i; j++){ //将无序区下标为i所指向的值插入有序区适当位置
if(Double.parseDouble(array[j].toString()) < Double.parseDouble(array[i].toString())){
swap(array, i, j);
}
}
System.out.println("--------------------------------------------------------------------------->第" + i + "趟");
print(array);
}
}
}
}
测试类:TestApp.java
package sort;
/**
* -----------------------------------------
* @文件: TestApp.java
* @作者: fancy
* @邮箱: fancydeepin@yeah.net
* @时间: 2012-7-18
* @描述: 测试类
* -----------------------------------------
*/
public class TestApp {
public static void main(String[] args) {
Object[] array = {9,5,7,1,6,3,8,10,4,2};
(new InsertSort()).insertSort(array, InsertSort.ASC);
}
}
后台输出打印结果:
--------------------------------------------------------------------------->第1趟
5 9 7 1 6 3 8 10 4 2
--------------------------------------------------------------------------->第2趟
5 7 9 1 6 3 8 10 4 2
--------------------------------------------------------------------------->第3趟
1 5 7 9 6 3 8 10 4 2
--------------------------------------------------------------------------->第4趟
1 5 6 7 9 3 8 10 4 2
--------------------------------------------------------------------------->第5趟
1 3 5 6 7 9 8 10 4 2
--------------------------------------------------------------------------->第6趟
1 3 5 6 7 8 9 10 4 2
--------------------------------------------------------------------------->第7趟
1 3 5 6 7 8 9 10 4 2
--------------------------------------------------------------------------->第8趟
1 3 4 5 6 7 8 9 10 2
--------------------------------------------------------------------------->第9趟
1 2 3 4 5 6 7 8 9 10
分享到:
相关推荐
例如,冒泡排序和插入排序简单但效率较低,适合小规模数据;堆排序和快速排序在中大规模数据上表现良好,但快速排序的不稳定性和堆排序的空间复杂度是需要注意的问题;归并排序和希尔排序在稳定性上有优势,而桶排序...
以上就是Java中快速排序、冒泡排序和插入排序的实现方式。快速排序的平均时间复杂度为O(n log n),冒泡排序和插入排序的平均时间复杂度为O(n^2)。在实际应用中,快速排序通常优于其他两种排序,尤其是在大数据量时。...
下面是一个简单的Java冒泡排序实现: ```java public class BubbleSort { public static void bubbleSort(int[] array) { int n = array.length; for (int i = 0; i ; i++) { // 外层循环控制遍历次数 for (int...
在Java中,冒泡排序的基本思路是使用两个for循环,外层循环控制比较的轮数,内层循环用于两两比较并交换。改进的冒泡排序通常包括设置标志位来检测是否已经完成排序,以及添加一个提前退出循环的条件,当某次遍历...
本文将详细介绍三种经典的排序算法:选择排序、冒泡排序和插入排序,并结合Java代码进行分析。 ### 1. 选择排序(Selection Sort) 选择排序的主要思想是每次从待排序的数据元素中选出最小(或最大)的一个元素,...
除了冒泡排序,代码还展示了其他两种经典的排序算法:选择排序和插入排序。 选择排序的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。...
在本文中,我们将深入探讨Java编程中的三种基本排序算法:冒泡排序、插入排序和堆排序。这些排序算法是计算机科学中的基础知识,尤其对于初学者来说,理解和实现它们至关重要。我们将详细讲解每种排序算法的工作原理...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
本文将详细讨论两种常见的简单排序算法:冒泡排序和直接插入排序,它们都是基于比较的内部排序算法,并且在Java语言中实现。 **冒泡排序(Bubble Sort)** 冒泡排序是一种基础的排序算法,其基本思想是通过重复...
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht
用 Java 实现冒泡排序算法可以通过反复比较和交换相邻元素的位置来实现排序。冒泡排序的时间复杂度分析表明,它的最好时间复杂度为 O(n),最坏时间复杂度为 O(n2),平均时间复杂度为 O(n2),且它是稳定的。
在`Insert.java`文件中,插入排序的实现可能包括: - 初始化已排序部分为第一个元素,然后逐个将后续元素与已排序部分的元素比较,并在合适位置插入。 - 每次插入一个新元素,都会导致已排序部分增加一个元素。 ...
例如,插入排序和选择排序适合小规模数据,冒泡排序虽然效率较低但实现简单,堆排序和快速排序在处理大规模数据时有较好性能,而基数排序则能处理非负整数排序。在实际开发中,根据具体需求选择合适的排序算法是非常...
标签中的“八大排序”指的是计算机科学中常见的八种排序算法:冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序、希尔排序和计数排序。这些排序算法各有特点,适用场景也不同,理解它们可以帮助我们更好地...
这些算法包括冒泡排序、插入排序、选择排序、归并排序以及快速排序。 **冒泡排序**是一种基础的排序方法,它通过重复遍历数组,比较相邻元素并交换位置,使得较大的元素逐渐“浮”到数组的一端。冒泡排序的时间...
本资源提供了三种经典的排序算法:直接选择排序、直接插入排序和冒泡排序的源代码实现,这些代码以类的形式封装,方便理解和维护。 1. 直接选择排序: 直接选择排序的基本思想是从待排序的数据元素中选出最小(或...
java排序算法java排序算法插入选择冒泡java排序算法插入选择冒泡
java实现10种排序算法:选择排序、冒泡排序、插入排序、快速排序、归并排序、堆排序、希尔排序、桶排_sorting-algorithms
Java中常见的三大排序算法包括插入排序、冒泡排序和选择排序。这三种排序算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程技能非常有帮助。 **1. 插入排序** 插入排序是一种简单直观的排序算法,它的...
Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...