`

排序算法(内部排序)总结

阅读更多

排序是计算机应用中的一个非常重要的操作。平常我们总会听到一些算法,但是我们总是似懂非懂的写着代码,今天我将一般常见的排序算法进行一个总结。

本次总结只涉及内部排序(所谓内部排序是指在内存中进行的排序)

首先说一个概念:稳定排序与非稳定排序

如果一个序列中原来相同的元素,排序完成后,仍然保持着原来的顺序,那么就成为稳定排序,反之就是非稳定排序。

                                插入排序

     (1).直接插入排序(Straiht Insertion Sort)

    算法描述:如果有一个已经排好序的序列 {R(20),R(35),R(88)},当要插入一个R(66)时,需要与各个元素进行比较,R(35)<R(66)<R(88),所以应该插在R(35)与R(88)直接。

    算法开始时,取一个元素为原序列,然后重复执行上面的方法,将每个元素插入到序列中。

void InsertSort(SlList &L)
{
for(int i = 2; i < =L.lenght;i++)
{
if(LT(L[i],L[i-1])) //LT函数判断两个元素的大小
{
L[0] = L[i];
              L[i] = L[i-1];
for(int j = i-2;LT(L[0],L[j]);j--)
{
L[j+1] = L[j];
}
L[j+1] = L[0];

}



}

此算法的时间复杂度为O(n2)

                                        快速排序

快速排序是一种基于交换的排序方法,最常见的有冒泡排序(BubbleSort),快速排序(改进的冒泡排序)(QuickSort)

下面先说冒泡排序:

冒泡排序的基本思想是在一次排序中,将最大的元素沉入底部,然后缩小范围,继续进行。

具体的说:取第一个元素,然后与第二个元素进行比较,如果比第二个大,那么交换,否则,不交换,然后取第二个元素与第三个元素比较,同样用前面的方法,大则交换,直到将最大的元素交换到最底部,这是第一遍排序结束,然后,缩小范围,从第二个元素开始,在此运用上面的一遍排序方法。直到范围缩小为一个元素的时候,排序结束。

下面是用c++语言描述的一个冒泡排序的算法:

    int a[5] = {1,3,5,4,2};
for(int i=4;i>=0;i--)
for(int j = 0;j<=i;j++)
{
if(a[j]>a[j+1])
{
int temp;
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
for(int s = 0;s<5;s++)
cout<<a[s];

由于最近在学习汇编,所以在emu8086上写了一个代码段,实现冒泡排序:

 

;汇编冒泡排序算法
N equ 5
mov cx,N-1
j03:push cx
lea BX,A
j02:mov AL,[bx]
cmp AL,[BX+1]
jnb j01
xchg AL,[BX+1]
mov [BX],AL
j01:inc bx
loop j02
pop cx
loop j03
A db 1,2,3,4,

                     选择排序

选择排序(Selection Sort)的基本思想是,每一趟排序在n-i+1(i=1,2,3....,n-1)中选取关键字最小的记录作为有序序列的第i个记录。

(1)最为简单的是简单选择排序(Sample Selection sort)

void selectsort(SqlList &L)
{
for(int i = 0;i < L.length;i++)
{
j = SelectMin*(L,i);//这个函数返回从i开始到结束的最小记录
//的位置
if(i!=j) exchage(L[i],L[j]);

}

}

(2)树形选择排序(Tree Selection Sort),又称锦标赛排序(Tournament sort),是一种按照锦标赛的思想,两两比较,然后在剩余的【n/2】个较小的元素中在进行两两比较,如此重复,最后选出最小的记录为止。

(3)堆排序(Heap Sort)

先介绍一下大顶堆与小顶堆:

在一棵二叉树中,如果所有父节点比儿子节点都大,称这颗树为大顶堆,反之,为小顶堆。

那么堆排序的思想便是将一个无序序列构建成大顶堆(或小顶堆)然后取出堆顶元素,再次调整这个堆,使之在此变成大顶推(或小顶堆),如此将所有元素取出,便排好了序。

归并排序

归并排序(Merging sort)

所谓归并,简单的讲,就是将两个有序的序列,合成一个新的有序表。我们用这个思想,可以把一个n个元素的序列,看成n个长度为1的子序列,然后利用归并排序,两两合并,然后的到了n/2个长度为2的子序列,再次进行合并,重复上面的步骤,直到合并为一个序列,则归并完成。

0
0
分享到:
评论

相关推荐

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    现代常见的排序算法,易于理解,讲解详细,有源代码

    内部排序算法比较 数据结构课程设计

    1、本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 2、待排序表的表的元素的关键字为整数,表长不小于100;其中的数据要用伪随机数产生...

    几种内部排序算法总结

    几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、拆半插入排序、简单选择排序)

    内部排序算法分析

    数据结构 内部排序算法分析 c语言代码

    数据结构内部排序算法比较.doc

    内部排序算法比较 【问题描述】 在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 ...

    内部排序算法比较

    《内部排序算法比较》 【问题描述】 在教科书中,各种内部排序算法的时间复杂度分析结果只给出算法的大致执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以获得直观感受 【基本要求】 (1)...

    数据结构课程设计(内部排序算法比较_C语言)

    数据结构课程设计(内部排序算法比较_C语言) 数据结构课程设计(内部排序算法比较_C语言)

    实验7: 内部排序算法比较.doc

    实验7: 内部排序算法比较.doc 实验7: 内部排序算法比较.doc 实验7: 内部排序算法比较.doc

    内部排序算法比较 课程设计

    本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。

    各种内部排序算法的比较

    各种内部排序算法的比较 各种内部排序算法的比较 各种内部排序算法的比较

    十大经典排序算法.pdf

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中 进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序 记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排 序、希尔排序...

    数据结构排序算法汇总包-直接插入排序 折半插入排序 2—路插入排序 表插入排序 希尔排序 起泡排序 快速排序 简单选择排序 树形选择排序 堆排序 归并排序链式基数排序

    实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...

    内排序算法比较,六种排序算法分析

    1) 对以下6种常用的内部排序算法进行比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。 2) 待排序记录的文件个数不小于1000( 其数据用伪随机数产生),至少用5组不同的输入数据作比较;比较...

    数据机构综合课设内部排序算法比较.docx

    各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 二.基本要求 (1)对以下10种常用的内部排序...

    内部排序算法的比较已知技术参数和设计

    通过随机数据比较各内部排序算法的关键字比较次数和关键字移动的次数,以取得直观感受。待排序表的表长不小于100;至少要用5组不同的输入数据作比较;排序算法不少于5种; 待排序的元素的关键字为整数; 比较的指标...

    7.1_内部排序算法排序.CPP

    1、常见排序算法实现(1-6选择几个算法练习) 1)问题描述:输入一组关键字序列分别实现下列排序。 (1)实现简单选择排序、直接插入排序和冒泡排序。 (2)实现希尔排序算法。 (3)实现折半插入排序。 ...

    内部排序算法比较,C语言

    要求对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。待排序表的表长不小于1000;其中的数据要用伪随机数产生程序产生,至少要用5组不同的输入数据作比较...

    数据结构课设内部排序算法研究的报告及源代码

    数据结构课设中的内部排序算法的完整实验报告和可运行源代码 绝对可用 绝对原创 题目: 一.题目:内部排序算法研究 (1)设n个关键字均为整数(1≤n≤100000) (2)设计K个内部排序算法(K≥5), 每个算法记录执行所...

    数据结构-内部排序算法的性能测试

    教材中,每种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 基本要求: (1)对以下6种常用的内部...

Global site tag (gtag.js) - Google Analytics