zoukankan      html  css  js  c++  java
  • 简单选择,冒泡,快速排序

    1、简单选择排序:设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟 后就完成了记录序列的排序。

    2、冒泡排序:从前向后依次比较,如果前面一个比后面一个小就交换,依次下去就选出一个最小的。如此下去,第二次选出第二小的,这样下去一直到排好为止。

    冒泡排序算法:

        1)初始
             R[1..n]为无序区。

              (2)第一趟扫描
             从无序区底部向上依次比较相邻的两个气泡的重量,若发现轻者在下、重者在上,则交换二者的位置。即依次比较(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],                  R[1]);对于每对气泡(R[j+1],R[j]),若R[j+1].key<R[j].key,则交换R[j+1]和R[j]的内容。
             第一趟扫描完毕时,"最轻"的气泡就飘浮到该区间的顶部,即关键字最小的记录被放在最高位置R[1]上。

        (3)第二趟扫描

           扫描R[2..n]。扫描完毕时,"次轻"的气泡飘浮到R[2]的位置上……
           最后,经过n-1 趟扫描可得到有序区R[1..n]

    3、快速排序:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    趟快速排序的算法是:

    1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
    2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
    3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将值为key的项与A[j]交换;
    4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将值为key的项与A[i]交换;
    5)重复第3步
    6)重复第3、4、5步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[j]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
     
     
  • 相关阅读:
    c#动态类型
    [转]鼠标和键盘模拟API
    c#各类型转byte[]或转回
    Unity3D发布安卓报错permisson denied的解决
    NuGet修改packages目录/迁移缓存文件夹
    数据结构:单向链表系列7--交换相邻两个节点2(交换链域/指针域)
    数据结构:单向链表系列6--交换相邻两个节点1(交换数据域)
    数据结构:单向链表系列5--在链表中查找元素
    数据结构:单向链表系列4--获取链表长度(迭代法和递归法)
    数据结构:单向链表系列3--删除节点
  • 原文地址:https://www.cnblogs.com/hackerl/p/3325880.html
Copyright © 2011-2022 走看看