`
junzai
  • 浏览: 14438 次
  • 性别: 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  

相关推荐

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

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

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

    用codeblocks用C语言实现的物种排序方法,从最基本的冒泡排序与选择排序,再到数据结构中所学的插入,快排与希尔排序

    数组的5种排序方法

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

    MySort.ts TS通用排序方法

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

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

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

    五种排序算法的性能比较

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

    五中内部排序算法的比较

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

    实验五:排序.docx

    排序:包括快速排序,冒泡排序,直接插入排序和简单选择排序。以最简单的C语言进行编译通俗易懂,能够解决很多同学在数据结构的排序方面解决一些问题。

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

    数据结构与算法程序的课程设计,能包括五种排序方法的详细代码。

    排序算法(直接插入排序、折半排序、直接选择排序、快速排序与归并排序)

    提供五种排序算法的C++实现方法,输入(待排序元素个数、排序码上界(采用随机生成数组方式)),可选择输出(原始数组、排序后数组、原始数组有序度和无序度、排序过程中数据比较次数与数据移动次数、数组中出现...

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

    NULL 博文链接:https://java--hhf.iteye.com/blog/1704793

    Java方法排序五百万数据

    采用JAVA方法排序五百万数据的算法,以及所生成的文件。

    几种c语言排序优缺点

    几种c语言排序的方法和优缺点,对C语言算法有兴趣的欢迎下载。

    哈工大数据结构实验5_冒泡排序与快速排序

    实验项目:排序方法的实验比较 排序方法是数据处理的最基本和最重要的操作。其目的是将一组“无序”的 记录序列调整为“有序”的记录序列。 实验题目:排序方法的实现与实验比较 实验内容: 实现一组经典的排序...

    排序综合比较.cpp

    功能描述:利用随机函数产生N个随机整数(N大于20000),对这些数用多种算法排序。 设计要求: 1)至少采用五种方法实现上述问题求解...2)记录每一种排序方法耗时情况并进行性能对比分析,找出其中两种较快的方法。

    排序综合 河北科技大学

    利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。 要求: 1) 至少采用五种方法实现...2) 统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。

    简单插入排序,实现简单排序方法

    c++实验之一:简单插入排序 实现简单排序方法

    数据结构经典排序方法

    共用五种 经典排序方法 其中包括直接插入排序 折半插入排序 冒泡排序 /快速排序 希尔排序

    数据结构5种经典排序算法

    数据结构中经典的5种排序方法,简单排序 快速排序 冒泡排序 希尔排序 直接插入排序,共有5个CPP文件,每个文件包含一种算法,运行的时候可把其他的注释掉,直接运行其中一个既可。

    数据结构排序方法总结.docx

    【数据结构的内部排序总结】1 / 10 数据结构排序方法总结全文共10页,当前为第1页。数据结构排序方法总结全文共10页,当前为第1页。数据结构的内部排序 数据结构排序方法总结全文共10页,当前为第1页。 数据结构排序...

Global site tag (gtag.js) - Google Analytics