`

交换排序

阅读更多
交换排序
冒泡排序
将最后一个元素与倒数第二个元素对比,如果最后一个元素比倒数第二个小,则交换两个元素的位置,再用倒数第二个元素与倒数第三个元数对比,直到比到第一个元素,这样经过第一趟排序后得到第一个最小元素。如此反复几过N(N=length-1)次后可得到排序结果。


Java代码
package sort;  
 
import java.util.Comparator;  
 
/** 
* 冒泡排序算法 
* @author jzj 
* @date 2009-12-9 
*  
* @param <E> 
*/ 
public class BubbleSort<E extends Comparable<E>> extends Sort<E> {  
 
    /** 
     * 排序算法的实现,对数组中指定的元素进行排序 
     * @param array 待排序的数组 
     * @param from 从哪里开始排序 
     * @param end 排到哪里 
     * @param c 比较器 
     */ 
    public void sort(E[] array, int from, int end, Comparator<E> c) {  
        //需array.length - 1轮比较  
        for (int k = 1; k < end - from + 1; k++) {  
            //每轮循环中从最后一个元素开始向前起泡,直到i=k止,即i等于轮次止  
            for (int i = end - from; i >= k; i--) {  
                //按照一种规则(后面元素不能小于前面元素)排序  
                if (c.compare(array[i], array[i - 1]) < 0) {  
                    //如果后面元素小于了(当然是大于还是小于要看比较器实现了)前面的元素,则前后交换  
                    swap(array, i, i - 1);  
                }  
            }  
        }  
    }  
 
    /**  
    * 测试  
    * @param args  
    */ 
    public static void main(String[] args) {  
        Integer[] intgArr = { 7, 2, 4, 3, 12, 1, 9, 6, 8, 5, 11, 10 };  
        BubbleSort<Integer> sort = new BubbleSort<Integer>();  
        BubbleSort.testSort(sort, intgArr);  
        BubbleSort.testSort(sort, null);  
    }  


package sort;

import java.util.Comparator;

/**
* 冒泡排序算法
* @author jzj
* @date 2009-12-9
*
* @param <E>
*/
public class BubbleSort<E extends Comparable<E>> extends Sort<E> {

/**
* 排序算法的实现,对数组中指定的元素进行排序
* @param array 待排序的数组
* @param from 从哪里开始排序
* @param end 排到哪里
* @param c 比较器
*/
public void sort(E[] array, int from, int end, Comparator<E> c) {
//需array.length - 1轮比较
for (int k = 1; k < end - from + 1; k++) {
//每轮循环中从最后一个元素开始向前起泡,直到i=k止,即i等于轮次止
for (int i = end - from; i >= k; i--) {
//按照一种规则(后面元素不能小于前面元素)排序
if (c.compare(array[i], array[i - 1]) < 0) {
//如果后面元素小于了(当然是大于还是小于要看比较器实现了)前面的元素,则前后交换
swap(array, i, i - 1);
}
}
}
}

/**
* 测试
* @param args
*/
public static void main(String[] args) {
Integer[] intgArr = { 7, 2, 4, 3, 12, 1, 9, 6, 8, 5, 11, 10 };
BubbleSort<Integer> sort = new BubbleSort<Integer>();
BubbleSort.testSort(sort, intgArr);
BubbleSort.testSort(sort, null);
}
}
分享到:
评论

相关推荐

    交换排序实现源码

    本文将深入探讨两种交换排序算法——冒泡排序和快速排序的实现原理及源码分析。 **冒泡排序(Bubble Sort)** 冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的列表,一次比较两个元素,如果他们的顺序...

    C#四种排序方法--交换排序 选择排序 冒泡排序 插入排序

    交换排序 选择排序 冒泡排序 插入排序

    排序算法.doc 详细讲解了插入排序、交换排序、选择排序、归并排序等排序算法的原理以及实现代码

    本文主要探讨四种基本的排序算法:插入排序、交换排序、选择排序和归并排序,这些都是内部排序的主要方法。 1. **插入排序**: - 直接插入排序是最基础的排序算法之一,它的工作原理类似于人们手动整理扑克牌。...

    java编程实现交换排序

    java 编程实现交换排序 public class jiaohuanpx{ public static void main(String[] args){ int i,j,t; int a[]=new int[]{8,9,3,2,4,6,7,5,10,1,11,54,78,22}; for(i=0;i;i++) System.out.print(a[i]+" "); ...

    数据结构 交换排序算法(c/c++)

    交换排序是一种常见的排序算法,它通过不断地交换元素来达到排序的目的。本文将深入探讨交换排序算法,特别是C/C++语言中的实现方式。 交换排序的核心思想是通过比较数组中的相邻元素,如果它们的顺序错误,就交换...

    数据结构:交换排序-冒泡排序实验指导

    ### 数据结构:交换排序-冒泡排序实验指导 #### 实验背景与目标 在计算机科学领域,数据结构和算法是核心研究对象,其中排序算法作为基础且重要的算法之一,广泛应用于各类数据处理场景。本实验旨在深入理解并掌握...

    交换排序之冒泡排序.cpp

    交换排序之冒泡排序.cpp

    一个用c++写的交换排序

    本示例聚焦于“交换排序”,一种基于比较的排序算法,具体来说是使用C++实现的。交换排序的基本思想是通过不断交换元素来调整序列,直到整个序列有序。 C++是一种广泛应用的面向对象的编程语言,它提供了丰富的库...

    数据结构中的 内部排序(插入排序 交换排序 选择排序 归并排序 基数排序)

    本文主要介绍了五种内部排序算法:插入排序、交换排序、选择排序、归并排序和基数排序。 1. **插入排序**: 插入排序的基本思想是从未排序的序列中取出一个元素,然后将其插入到已排序序列的正确位置,以保持序列...

    经典排序算法,有选择排序,冒泡排序,交换排序,谢尔排序,插入排序基数排序

    根据给定的文件信息,我们将深入探讨几种经典的排序算法,包括选择排序、冒泡排序、交换排序、希尔排序、插入排序以及基数排序。这些算法在计算机科学领域内有着广泛的应用,各自具有独特的特点和适用场景。 ### 1....

    交换排序Java实现

    冒泡排序是一种简单直观的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的...

    交换排序.cpp

    交换排序.cpp交换排序.cpp

    希尔排序法(希尔插入排序,希尔交换排序)

    ### 希尔排序法(希尔插入排序,希尔交换排序) #### 一、希尔排序法简介 希尔排序法是计算机科学领域中一种重要的排序算法,它由美国计算机科学家Donald Shell于1959年提出,因此得名希尔排序。希尔排序是一种...

    第交换排序PPT学习教案.pptx

    【交换排序】,又称冒泡排序,是一种简单的排序算法,主要通过不断交换相邻的、顺序错误的元素来逐步实现整个序列的排序。在【第交换排序PPT学习教案.pptx】中,详细展示了交换排序的过程。以一个具体的例子为例,如...

    交换排序\冒泡排序.

    交换排序是一个更广泛的术语,它包括了所有通过交换元素来实现排序的算法,而冒泡排序是其中最简单且最直观的一种。虽然冒泡排序的时间复杂度在最坏情况下是O(n²),但其优点在于实现简单,适用于小规模或者部分有序...

    用于数组的交换排序算法

    感觉比冒泡排序好的排序算法,借助此算法来对比冒泡排序算法,可以加深对这两种经典而双简单的排序算法的理解。

    排序算法(插入排序、交换排序、选择排序、归并排序、基数排序)

    本篇文章将详细解析五种常见的排序算法:插入排序、交换排序、选择排序、归并排序和基数排序,并探讨它们各自的特点和适用场景。 插入排序是一种简单直观的排序方法,它的工作原理是通过构建有序序列,对于未排序...

    第15讲 选择与交换排序。.pptx

    培养算法思维,掌握枚举算法、分治策略、递归与迭代、选择与交换排序等经典算法模型; 培养实践能力,掌握在存储空间和时间开销受限情况下的程序设计方法; 培养理论思维,掌握复杂问题的算法设计与分析方法。

    C#中for循环的交换排序案例 c#经典案例.pdf

    本文将详细解析三种基于for循环的交换排序算法,包括冒泡排序、选择排序和改进版的交换排序。这些算法都通过比较和交换元素来达到排序的目的,但它们的具体实现有所不同。 1. **交换排序**: 交换排序的基本思想是...

    数据结构排序插入排序和交换排序PPT学习教案.pptx

    本PPT学习教案主要介绍了两种基础的排序方法:插入排序和交换排序。 首先,排序的基本定义是将数据元素(如数组或列表中的项)从一个任意序列调整为一个按指定关键字(key)有序的序列。例如,将一个无序的数字序列...

Global site tag (gtag.js) - Google Analytics