`
messon619
  • 浏览: 45367 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

排序方法原理与语句

阅读更多
插入排序
1.直接插入排序

原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序。

要点:设立哨兵,作为临时存储和判断数组边界之用。

实现:

Void InsertSort(Node L[],int length)

{

Int i,j;//分别为有序区和无序区指针

for(i=1;i<length;i++)//逐步扩大有序区

{

j=i+1;

if(L[j]<L[i])

{

L[0]=L[j];//存储待排序元素

While(L[0]<L[i])//查找在有序区中的插入位置,同时移动元素

{

L[i+1]=L[i];//移动

i--;//查找

}

L[i+1]=L[0];//将元素插入

}

i=j-1;//还原有序区指针

}

}

2.希尔排序

原理:又称增量缩小排序。先将序列按增量划分为元素个数相同的若干组,使用直接插入排序法进行排序,然后不断缩小增量直至为1,最后使用直接插入排序完成排序。

要点:增量的选择以及排序最终以1为增量进行排序结束。

实现:

Void shellSort(Node L[],int d)

{

While(d>=1)//直到增量缩小为1

{

Shell(L,d);

d=d/2;//缩小增量

}

}

Void Shell(Node L[],int d)

{

Int i,j;

For(i=d+1;i<length;i++)

{

if(L[i]<L[i-d])

{

L[0]=L[i];

j=i-d;

While(j>0&&L[j]>L[0])

{

L[j+d]=L[j];//移动

j=j-d;//查找

}

L[j+d]=L[0];

}

}

}

交换排序

1.冒泡排序

原理:将序列划分为无序和有序区,不断通过交换较大元素至无序区尾完成排序。

要点:设计交换判断条件,提前结束以排好序的序列循环。

实现:

Void BubbleSort(Node L[])

{

Int i ,j;

Bool ischanged;//设计跳出条件

For(j=n;j<0;j--)

{

ischanged =false;

For(i=0;i<j;i++)

{

If(L[i]>L[i+1])//如果发现较重元素就向后移动

{

Int temp=L[i];

L[i]=L[i+1];

L[i+1]=temp;

Ischanged =true;

}

}

If(!ischanged)//若没有移动则说明序列已经有序,直接跳出

Break;

}

}

2.快速排序

原理:不断寻找一个序列的中点,然后对中点左右的序列递归的进行排序,直至全部序列排序完成,使用了分治的思想。

要点:递归、分治

实现:


选择排序

1.直接选择排序

原理:将序列划分为无序和有序区,寻找无序区中的最小值和无序区的首元素交换,有序区扩大一个,循环最终完成全部排序。

要点:

实现:

Void SelectSort(Node L[])

{

Int i,j,k;//分别为有序区,无序区,无序区最小元素指针

For(i=0;i<length;i++)

{

k=i;

For(j=i+1;j<length;j++)

{

If(L[j]<L[k])

k=j;

}

If(k!=i)//若发现最小元素,则移动到有序区

{

Int temp=L[k];

L[k]=L[i];

L[i]=L[temp];

}

}

}

2.堆排序

原理:利用大根堆或小根堆思想,首先建立堆,然后将堆首与堆尾交换,堆尾之后为有序区。

要点:建堆、交换、调整堆

实现:

Void HeapSort(Node L[])

{

BuildingHeap(L);//建堆(大根堆)

For(int i=n;i>0;i--)//交换

{

Int temp=L[i];

L[i]=L[0];

L[0]=temp;

Heapify(L,0,i);//调整堆

}

}


Void BuildingHeap(Node L[])

{ For(i=length/2 -1;i>0;i--)

Heapify(L,i,length);

}

归并排序

原理:将原序列划分为有序的两个序列,然后利用归并算法进行合并,合并之后即为有序序列。

要点:归并、分治

实现:

Void MergeSort(Node L[],int m,int n)

{

Int k;

If(m<n)

{

K=(m+n)/2;

MergeSort(L,m,k);

MergeSort(L,k+1,n);

Merge(L,m,k,n);

}

}


基数排序

原理:将数字按位数划分出n个关键字,每次针对一个关键字进行排序,然后针对排序后的序列进行下一个关键字的排序,循环至所有关键字都使用过则排序完成。

要点:对关键字的选取,元素分配收集。

实现:

Void RadixSort(Node L[],length,maxradix)

{

Int m,n,k,lsp;

k=1;m=1;

Int temp[10][length-1];

Empty(temp); //清空临时空间

While(k<maxradix) //遍历所有关键字

{

For(int i=0;i<length;i++) //分配过程

{

If(L[i]<m)

Temp[0][n]=L[i];

Else

Lsp=(L[i]/m)%10; //确定关键字

Temp[lsp][n]=L[i];

n++;

}

CollectElement(L,Temp); //收集

n=0;

m=m*10;

k++;

}

}
分享到:
评论

相关推荐

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

    2. **选择排序**:选择排序的工作原理是在未排序的部分找到最小(或最大)元素,然后将其放到已排序部分的末尾。这个过程持续到所有元素都被放置在正确的位置。选择排序的时间复杂度也为O(n²)。 3. **插入排序**:...

    VB中三种排序方法

    然而,了解这些基本排序方法对于理解算法原理和优化代码至关重要。 在小组作业中,你们可能需要编写这三个排序算法的VB代码,并对它们进行性能测试,以比较不同排序方法在不同数据集上的效率。这不仅能提升编程技能...

    SQL语句编写优化和基本原理总结

    ### SQL语句编写优化与基本原理深度解析 #### 引言 SQL语句编写优化是数据库性能提升的关键一环,特别是在大数据量处理和高并发环境下,优化得当的SQL语句能够显著提升系统的响应速度和资源利用率。本文将基于王...

    排序算法原理与实现(java)编银行JAVA笔试题二编程资料程资料

    "排序算法原理与实现(java)编银行JAVA笔试题二编程资料" 在这篇文章中,我们将探讨java中的排序算法原理和实现,通过java笔试题二的编程资料,帮助读者更好地理解java语言的基本概念和算法实现。 题目1:访问控制 ...

    MyBatisPlus条件构造器带条件排序方法orderBy、orderByDesc、orderByAsc使用示例代码

    而`orderByAsc`方法与`orderBy`类似,也是用于升序排序,但它的存在是为了与`orderByDesc`保持一致,提高代码可读性。如果你习惯于使用`orderByAsc`,可以这样写: ```java List&lt;User&gt; users = userMapper.select...

    SQL语句的执行原理及顺序

    SQL 语句的执行原理及顺序 SQL 语句的执行原理及顺序是数据库管理系统中非常重要的知识点。了解 SQL 语句的执行顺序可以帮助开发人员更好地优化查询语句,提高数据库性能。 SQL 语句的执行顺序可以分为 11 个步骤...

    Verilog/C++实现排序算法:Verilog/C++实现排序算法:冒泡排序、选择排序、并行全比较排序、串行全比较排序

    在C++中,冒泡排序可以通过嵌套循环实现,而用Verilog实现则需要使用进程(process)和条件语句。 **选择排序**是另一种基本的排序算法,它每次从未排序的元素中找到最小(或最大)的元素,然后放到已排序序列的...

    sql语句万能生成器,sql语句,sql语句生成

    这种工具通常包含各种功能,如:根据数据库结构自动生成SELECT、INSERT、UPDATE、DELETE语句,支持JOIN操作,生成复杂的子查询,以及处理分组、排序、条件过滤等。 使用SQL语句生成器,你可以: 1. **快速创建查询...

    oracle分页 排序

    ### Oracle分页与排序知识点详解 #### 一、Oracle分页查询原理及应用 在Oracle数据库中,实现分页查询通常依赖于`ROWNUM`伪列。`ROWNUM`为每一行分配一个唯一的行号,从1开始递增。利用这一特性,我们可以有效地...

    C#最基本的排序方法(冒泡排序、快速排序).zip

    本资源主要探讨了两种基本的排序方法:冒泡排序和快速排序。 首先,我们来详细了解一下冒泡排序。冒泡排序是一种简单直观的排序算法,它的名字来源于排序过程中较小的元素像气泡一样逐渐“浮”到数组的顶端。其工作...

    Mybatis排序无效问题解决.doc

    #### 分析与原理 为什么使用`#{}`会导致排序失效呢?这涉及到Mybatis中预编译机制与表达式的处理方式。 1. **预编译与安全防护**:在Mybatis中,`#{}`主要用于参数预编译,它可以有效防止SQL注入攻击。预编译过程...

    微机原理_微机原理_

    这些排序算法都需要用到基本的循环和条件判断语句,这些在汇编语言中通常由JMP、JNE、CMP等指令实现。 例如,选择排序的工作流程是:遍历数组,找到最小值,然后与第一个元素交换;再遍历剩下的元素,找到新的...

    排序子系统 C语言版

    《排序子系统——C语言实现详解》 在计算机科学领域,排序是数据处理的基本操作之一,...通过阅读和理解源代码,学生不仅可以巩固C语言基础,还能深入了解各种排序算法的原理和实现,为未来的编程项目打下坚实基础。

    浅谈MySQL排序原理与案例分析

    MySQL排序原理与案例分析 排序是数据库操作中的关键部分,MySQL提供了多种方法来处理排序需求。用户通常通过`ORDER BY`语句实现结果集的排序,但`GROUP BY`和`DISTINCT`语句也会隐含地进行排序。了解如何优化排序...

    数组排序知识代码(c#)

    **插入排序**是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的...

    《数据库原理及应用》课程中SQL语句的教学方法探析.pdf

    针对学生在学习SQL语句时常遇到的困难,如理解与实践脱节的问题,本文探讨了一种结合理论与实践的教学方法,以提高教学质量,并帮助学生更好地掌握SQL语句的使用。 首先,文章重点关注了SQL中的四条基础数据操作...

    Java之冒泡排序方法实例讲解.docx

    冒泡排序(Bubble Sort)是一种基础且直观的排序算法,主要应用于教学和理解排序原理。在Java编程中,我们可以很容易地实现冒泡排序的方法。以下是对冒泡排序及其Java实现的详细讲解: 冒泡排序的基本思想是通过...

    Java实现几种常见排序方法-直插、冒泡、选择、快排、堆排等

    插入排序(Insertion Sort)的排序原理是构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。它的工作方式与我们打扑克牌时将新牌插入到已排序的手牌中类似。插入排序在最好情况下时间...

    用VC写的各种排序方法,有些不错

    插入排序是一种直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在VC++中,你可以使用两层循环,外层循环控制未排序部分,内层循环则用于找到...

Global site tag (gtag.js) - Google Analytics