`
junzai
  • 浏览: 15187 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

五种排序方法比较

 
阅读更多
五种排序方法小结:

冒泡排序,选择排序,插入排序,希尔排序,快速排序

1、冒泡排序:
小的浮起来,重的沉下去
抓住位置,将一个固定位置与后面位置的相比,若后面的小于前面的,则交换位置,如:
5 6 4 7 1 9 2 3 8
抓住位置1,和后面的依次比较
4 6 5 7 1 9 2 3 8
1 6 5 7 4 9 2 3 8
最小的1上升到最前面
抓住位置2,和后面的依次比较
1 5 6 7 4 9 2 3 8
······接下来的都类似。
示例代码:
public void maopao(int[]a){
    for(int i=0;i<a.length-1;i++){//i只需要循环到倒数第二个数就行了
    for(int j=i+1;j<a.length;j++){
 
    if(a[i]>a[j])
    {//互换两个值
    a[i]=a[i]+a[j];或者也可以: int temp=a[i];
    a[j]=a[i]-a[j]; a[i]=a[j];
    a[i]=a[i]-a[j]; a[j]=temp;
    }
    }
    }
}
优点是简单通俗易懂,缺点是交换次数多,循环效率不高

2、选择排序:
与冒泡排序类似,但是抓住的是元素,抓住最小那个
3 7 6 5 2 8 9 4 1
首先抓住3,和后面比较,直到比2小,这时放开3,抓住2,2再和后面比较,最后放开2,抓住1,将
1,3的位置调换,此时最小的元素已经放在第一位了
1 7 6 5 2 8 9 4 3
接下来抓住7,步骤和上面类似

示例代码:public void choose(int[]a){
    //先找到数组值最小的索引
    for(int i=0;i<a.length;i++){
    //先令每次循环开始时的第一个数组下标为最小索引
    int lowerIndex=i;
    for(int j=i+1;j<a.length;j++){
       //判断。当Index所指向的值大于数组的某个值时,将最小索引的值改为数组下标
    if(a[lowerIndex]>a[j]){
    lowerIndex=j;
    }
    }
    //循环结束时,得到的Index指向的值即为最小值
    //将这个值与循环开始的第一个下标的值对换
    int temp=a[lowerIndex];
         a[lowerIndex]=a[i];
         a[i]=temp;
    }
   
    }
优点同样是较容易理解掌握,缺点是循环效率不高
冒泡排序和选择排序都是前面与后面的比较,而下面的插入排序是后面与前面比较


3、插入排序:

3 7 5 6 2 8 9 4 1
第二项与第一项比较,不用换
第三项与第二项比较,交换位置,再与第一项比较,不用换.就相当于5是插在中间的
3 5 7 6 2 8 9 4 1
接下来的类似


示例代码:

public void ChaRu(int[]a){
    //首先从数组的第二项开始,依次与左边比较
    for(int i=1;i<a.length;i++){
    for(int j=i;j>0;j++){
    //如果左边的值大于右边,则交换位置
    if(a[j]<a[j-1]){
    int temp=a[j];
    a[j]=a[j-1];
    a[j-1]=temp;
    }
   
    }
    }
    }
优点是交换的次数相对比较少,效率较高


4、希尔排序:
其基本思想是将数组的长度除以2,3,4…,即分成的块数,再分别进行插入排序,如:
3 7 5 6 2 8 9 4 1
共9个元素,9/2=4,分成2块,每块4个
3 7 5 6 2 8 9 4 1
将每块中相应位置的元素取出
3 2 1 7 8 5 9 6 4
每一块进行插入排序
1 2 3 7 8 5 9 4 6
还原到原来相应的位置
1 7 5 4 2 8 9 6 3
继续9/3=3,分成3块
1 7 5 4 2 8 9 6 3
插入排序
1 5 7 2 4 8 3 6 9
还原
1 2 3 5 4 6 7 8 9
接下来除以4……最后是除以9,分成9块,就相当于对一块进行插入排序

代码如下:

public void shell(int[]x){
    //分组
    for(int increment=x.length/2;increment>0;increment/=2){
    //每个组中排序
    for(int i=increment;i<x.length;i++){
    int temp=x[i];
    int j=0;
    for(j=i;j>=increment;j-=increment){
    if(temp<x[j]-increment){
          x[j]=x[j-increment];
    }else{break;}
    }
    x[j]=temp;
      }
   
    }
    }
是以上四种中最高的,循环次数少

5、快速排序:
是以上循环效率最高的,抓住元素
5 7 6 3 2 8 9 4 1
最前面的与最后面的一个比较,交换位置
1 7 6 3 2 8 9 4 5
5再与1旁边没有比过的元素7相比,交换位置
1 5 6 3 2 8 9 4 7
5和7旁边没有比过的4比较,换位置
1 4 6 3 2 8 9 5 7
……接下来的情况依次类推,具体的代码略


分享到:
评论
1 楼 小小瑶 2012-07-11  

相关推荐

    C语言实现的五种基本的排序方法

    本资源聚焦于使用C语言实现五种基本的排序方法,这些方法是算法学习的基础,对于理解和提升编程能力至关重要。 1. 冒泡排序(Bubble Sort) 冒泡排序是最简单的排序算法之一,它通过不断地比较相邻元素并交换位置,...

    《快速排序 直接插入排序 堆排序 希尔排序 选择排序:五种排序》

    (1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,...(3) 演示程序开始,以菜单形式让用户选择数据的生成方式和不同的排序方法演示; (4) 排序算法演示要求输出排序花费的时间以便进行定量比较;

    数组的排序的五种基本方法

    本文将详细探讨数组的五种基本排序方法,包括冒泡排序、选择排序、插入排序、快速排序以及归并排序。这五种方法各有特点,适用场景不同,理解它们的工作原理能帮助我们更有效地处理数据。 1. 冒泡排序(Bubble Sort...

    数组的5种排序方法

    列举五种java数组中常用的排序方法:快速排序、冒泡排序、选择排序、插入排序、希尔排序

    编制一维数组排序程序。数组大小n用全局变量定义,数组数据从文本文件中读入或随机生成。包含冒泡排序、选择排序、插入排序三种排序方法。程序能够选择使用任何一种方法排序。

    为了优化和比较不同排序算法的效率,程序可能还包含了性能分析功能,如计时器来测量每种排序方法所需的时间,或者使用特定的性能指标如比较次数和交换次数。 总结来说,这个项目旨在培养编程者对基本数据结构、文件...

    实验五:排序.docx

    通过对四种排序算法的实现和比较,可以看到快速排序算法的效率最高,而冒泡排序算法的效率最低。实验结果表明,选择合适的排序算法对于提高程序的效率非常重要。 六、结论 本实验通过对四种排序算法的实现和比较,...

    常用五种排序方法:冒泡、选择、插入、归并、快速

    常用的五种排序方法,包括 冒泡法排序,选择排序,插入排序,归并排序,快速排序

    五种排序算法的性能比较

    五种算法分别为选择排序,冒泡排序,快速排序,归并排序和插入排序。代码不算优秀,仅供参考。

    MySort.ts TS通用排序方法

    * 通用排序方法 * @param arr 需要排序的数组 * @param field 排序字段 值类型传null 单字段传string 多字段传数组[["field1", SortType], ["field2", SortType]] 可传属性名 方法名 * @param sortType 排序类型...

    数据结构--五种排序

    数据结构是计算机科学中的核心课程,它探讨了如何有效地存储和检索数据,以优化算法的效率。在数据结构的学习中,排序是一...通过对比分析不同排序算法的性能和适用场景,可以更好地选择在实际问题中使用哪种排序方法。

    算法排序实验报告 包括对五种排序算法的算法实现时间的比较

    1. **冒泡排序(Bubble Sort)**:这是一种简单的排序方法,通过重复遍历数组,每次比较相邻元素并交换位置,如果需要的话,直到没有更多的交换。冒泡排序的时间复杂度在最坏情况下为O(n²),最好情况(已排序数组)...

    c++几种常用的数字排序方法

    以上五种排序算法都是C++编程中常见的数字排序方法,每种都有其适用场景和优缺点。理解并熟练运用这些排序算法,可以帮助开发者在实际编程中根据数据特性选择最合适的排序策略,从而提高程序效率。在学习和实践中,...

    五中内部排序算法的比较

    对冒泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序这六种常用的内排序方法的掌握,通过对各种排序算法的分析,对其关键字的比较次数和移动次数进行分析,运用数据结构所学的知识将其用程序实现。

    数据结构课程设计——五种排序详细代码

    1. 冒泡排序:这是一种简单的排序方法,通过不断交换相邻的不正确顺序元素来逐步排序数组。其主要特点是每一轮排序都能确保最大的元素被放到正确的位置。时间复杂度为O(n^2)。 2. 直接插入排序:当新元素插入到已...

    C语言的五种排序

    这些排序方法各有优缺点,适用于不同的场景。例如,冒泡排序和插入排序适用于数据量较小的情况,而快速排序和希尔排序则适用于大数据量的排序。在实际应用中,应根据具体情况选择合适的排序算法。

    内部排序 希尔排序和直接插入排序的比较

    本篇文章将通过一组具体的数据集(8个整数)对直接插入排序(Direct Insertion Sort)和希尔排序(Shell Sort)这两种排序方法进行深入分析和比较。这两种排序算法在实际应用中都非常常见,各有优劣。 #### 二、...

    几种常见排序算法代码

    五、归并排序 归并排序采用分治策略,将数组分为两半,分别排序,然后合并。它的时间复杂度为O(n log n),空间复杂度为O(n)。适用于大规模数据排序,特别是对稳定性有要求的场景。 六、快速排序 快速排序是通过选取...

    几种c语言排序优缺点

    以下是一些常见的排序方法及其特点: 1. **冒泡排序 (Bubble Sorting)**: - 简单描述:通过不断地交换相邻的两个不正确排序的元素来逐渐推进整个序列的排序。 - 优点:实现简单,对于小规模数据或基本有序的数据...

    8种排序算法(选择排序 冒泡排序 快速排序等~)

    了解每种排序算法的时间复杂度和空间复杂度,有助于在不同场景下选择最合适的排序方法。例如,快速排序在大多数情况下表现优秀,而计数排序则适合于元素范围较小的整数排序。在学习和实践中,结合具体需求灵活运用...

    几种排序及其测试比较

    根据给定的信息,本文将对六种不同的排序算法进行详细解析与对比,这些排序方法包括:插入排序(InsertSort)、希尔排序(ShellSort)、快速排序(QuickSort)、堆排序(HeapSort)、冒泡排序(BubbleSort)以及选择...

Global site tag (gtag.js) - Google Analytics