`

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

阅读更多

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

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

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

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

                                插入排序

     (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
分享到:
评论

相关推荐

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

    本文将对几种常见的内部排序算法和外部排序算法进行详细总结。 首先,排序的基本定义是:给定一个包含n个记录的序列,其关键字序列分别为K1, K2, ..., Kn,如果存在一个排列p1, p2, p3, ..., pn,使得关键字满足非...

    内部排序算法分析

    在计算机科学领域,内部排序是数据处理中至关重要的一部分,它涉及到如何有效地对内存中的数据进行排列。本主题将深入探讨内部排序算法,并结合C语言代码进行解析。内部排序,顾名思义,是指数据在主存储器(内存)...

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

    ### 数据结构课程设计:内部排序算法比较_C语言 #### 一、课题背景与意义 排序作为数据结构中的重要组成部分,在实际开发中具有广泛的应用场景。理解不同排序算法的特点及其适用场景,对于提高程序效率和解决问题...

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

    【内部排序算法比较课程设计】主要关注的是对六种经典的内部排序算法的性能对比,包括起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序。这些算法是计算机科学中用于对数据进行排序的基础工具,各...

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

    根据给定文件的信息,我们可以详细地探讨一下内部排序算法比较的研究背景、实验目的以及具体的实现方法等内容。 ### 研究背景 随着信息技术的发展,数据处理能力成为了衡量一个系统性能的重要标准之一。在数据处理...

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

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

    C语言数据结构内部排序算法及比较

    本文将深入探讨“C语言数据结构内部排序算法及比较”这一主题,结合个人课程作业的经验,对一些核心概念进行阐述,并对常见的内部排序算法进行比较。 首先,数据结构是组织和管理数据的方式,它包括数组、链表、树...

    几种内部排序算法总结

    ### 几种内部排序算法总结 #### 冒泡排序(Bubble Sort) 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复进行的,...

    内部排序算法比较

    在计算机科学中,内部排序是指数据在内存中进行的排序过程,无需额外的存储设备。本报告主要关注了六种常见的内部排序算法:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序,并通过实验比较它们...

    六种内部排序算法比较:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序。

    本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...

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

    内部排序是指数据记录在内存中进行排序的过程。本篇文章将深入探讨10种常见的内部排序算法,包括它们的基本思想、比较次数和移动次数的计算,以便更直观地理解不同算法的效率。 1. **直接插入排序**: 直接插入...

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

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

    内部排序算法性能分析及算法改进

    ### 内部排序算法性能分析及算法改进 #### 一、引言 排序作为计算机科学中的基础课题之一,被广泛应用于各个领域。随着信息技术的发展,数据处理的需求日益增长,高效稳定的排序算法对于提升计算机系统的整体性能...

    内部排序算法的性能分析

    在计算机科学领域,内部排序是数据处理的重要组成部分,它涉及到如何高效地对内存中的数据进行排列。本项目针对内部排序算法进行了性能分析,通过设计一个测试程序,对比了几种常见内部排序算法的关键字比较次数和...

    广东工业大学_数据结构(内部排序算法)实验报告

    总结来说,广东工业大学的这份数据结构实验报告深入探讨了内部排序算法,尤其是直接插入排序的实现和性能分析。这些基础知识对于理解和应用计算机科学中的数据处理技术至关重要,也是软件开发人员必备的技能之一。...

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

    内部排序是指所有排序操作都在主内存中完成的排序过程。下面我们将深入分析几种常见的内部排序算法:冒泡排序、选择排序、快速排序、插入排序以及希尔排序,并着重讨论它们在比较次数和移动次数上的表现。 ### 冒泡...

    排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录

    在本文中,我们将深入探讨内部排序算法,包括它们的工作原理、优缺点以及如何使用Python、JavaScript、Java、Go和PHP这些编程语言来实现它们。 1. 冒泡排序:冒泡排序是一种简单的交换排序方法,通过不断比较相邻...

    内部排序算法比较.rar

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

    【排序结构5】 基于比较的内部排序总结

    【排序结构5】基于比较的内部排序总结 在计算机科学中,排序是将一组数据按照特定顺序排列的过程。内部排序,或称为内存排序,是指数据记录在内存中进行的排序,与外部排序(数据量太大无法全部装入内存)相对。本...

Global site tag (gtag.js) - Google Analytics