`

排序概念

阅读更多
数据表:待排序数据元素的有很集合

排序码:通常数据元素有多个个属性域,即多少个数据成员组成,其中有一个属性域可用来区分元素,作为排序依据。

稳定性:2个元素R1,R2,它们的排序码K1=k2,在排序前R1在R2前,排序后R1仍在R2之前,则称这个排序方法是稳定的。

内部排序:在排序期间数据元素全部存放在内存的排序。

外部排序:在排序期间全部元素个数太多,不能同时存放内存,必须根据排序过程的要求,不断在内,外存之间移动的排序

直接插入排序:稳定
#include<iostream>
using namespace std;

/*
  如果当前值大于前一个数,那么,前面的数向后移动,直
  到当前值找到合适的插入位置为止
  */
void insertSort(int *a,int size){
    int j,temp;
    for(int i=1;i<size;i++){
        if(a[i]<a[i-1]){
            temp = a[i];
            j = i;
            do{
                a[j]=a[j-1];
                j--;
            }while(a[j]>temp&&j>0);
            a[j+1] = temp;
        }
    }
}

int main(){
    int a[] = {1,3,2,5,6,4,9,10,8,7};
    insertSort(a,10);
    for(int i=0;i<10;++i)
        cout << a[i] << " ";
}
1 2 3 4 5 6 7 8 9 10


希尔排序:不稳定
#include<iostream>
using namespace std;

void shellSort(int *a,int left,int right){
    int i,j,gap = right-left+1;
    int temp;
    do{
        gap = gap/3+1;
        for(i=left+gap;i<=right;i++){
            if(a[i]<a[i-gap]){
                temp = a[i];
                j = i-gap;
                do{
                    a[j+gap] = a[j];
                    j = j-gap;
                }while(j>=left&&temp<a[j]);
                a[j+gap] = temp;
            }
        }
    }while(gap>1);
}

int main()
{
    int a[] = {1,3,2,5,6,4,9,10,8,7};
    shellSort(a,0,9);
    for(int i=0;i<10;++i)
        cout << a[i] << " ";
}

1 2 3 4 5 6 7 8 9 10 


O(n*n):
直接插入,冒泡,直接选择
O(nlogn):
快速:用的最多
堆:平均性能不如快速
归并:稳定,但需附加O(n)内存空间
分享到:
评论

相关推荐

    生产作业计划与排序概念.pptx

    生产作业计划与排序概念.pptx

    归并排序概念原理.md

    归并排序

    中班数学活动有趣的排序PPT学习教案.pptx

    本中班数学活动“有趣的排序”旨在通过寓教于乐的方式,帮助幼儿理解和应用排序概念,这是早期数学教育中的重要组成部分。排序是基础数学能力的基础,它涉及比较、模式识别和逻辑推理,对发展幼儿的思维能力和解决...

    java堆排序概念原理介绍

    "java堆排序概念原理介绍" java堆排序是一种基于比较的排序算法,它通过构建一个堆来实现排序。下面是关于java堆排序概念原理的详细介绍: 什么是堆排序 堆排序是一种基于比较的排序算法,它通过构建一个堆来实现...

    vb动态排序演示vb动态排序演示1

    在VB(Visual Basic)编程中,...总之,这个“vb动态排序演示”项目是一个很好的学习资源,它可以帮助你掌握VB中的动态排序概念,特别是冒泡排序的实现。通过研究和实践,你可以加深对排序算法的理解,提高编程能力。

    C语言中常用排序方法

    冒泡排序的时间复杂度为O(n^2),在处理大量数据时效率较低,但其简单易懂的实现方式使得它在教学和理解排序概念时很有帮助。 **插入排序(Insertion Sort)** 插入排序的基本思想是将未排序的元素逐个插入到已排序...

    排序算法大全(概念详细)

    该电子书包含了详细的排序概念覆盖了算法中几乎所有的排序算法,附带插图,以及各排序算法的优劣,总结

    冒泡排序与选择排序的探讨与总结

    冒泡排序和选择排序是两种基础且常见的计算机编程中的排序算法,主要应用于数据处理和算法学习。...这两种算法虽然在效率上不如其他高级排序算法,但它们在理解和教学排序概念方面具有重要的作用。

    幼儿园中班数学活动教案——《排序》.pdf

    这些延伸活动有助于孩子们将抽象的数学知识转化为具体的生活经验,加深对排序概念的理解和运用。 在活动反思中,教师提到了一些在教学过程中的不足,例如操作材料的单一性和对孩子操作指导的不明确。这提醒了我们在...

    排序_c_一个简单的排序_源码

    标签“c 一个简单的排序”进一步确认了这个代码示例可能涉及的是C++语言中的基本排序概念,可能适用于初学者或者作为教学示例。 至于压缩包内的文件“排序”,可能是包含了整个排序算法的C++源代码文件,可能包含了...

    python实现的冒泡排序

    冒泡排序是一种简单的排序算法,它的基本思想是通过对待...效率问题:尽管冒泡排序概念上简单易懂,但它并不是最高效的排序算法,特别是对于大型数据集。它的平均和最坏情况时间复杂度均为O(n²),其中n是列表的长度。

    完整详细版 C语言版 数据结构与算法课程 第3章 排序算法基础(共46页).ppt

    1. **排序概念**: - 排序是指将一组无序的记录序列调整为有序的过程。这里的记录通常包含一个或多个数据项,其中的关键字域用于唯一标识记录。如果关键字能唯一标识记录,那么它被称为主关键字,否则为次关键字。...

    幼儿园学习排序的自制数学玩教具(7款).pdf

    1. 提升幼儿对排序概念的理解:通过具体的操作和游戏,帮助幼儿理解排序的含义,即按照一定的规则将对象进行排列。 2. 发展幼儿的观察能力和逻辑思维:通过对比和分类的活动,培养幼儿的观察能力,同时锻炼他们的...

    大班计算:有趣的排序.docx

    在这个名为"有趣的排序"的活动中,教师旨在让孩子们在愉快的氛围中理解和运用排序概念。 活动目标非常明确,首先,它鼓励孩子们自由排序,这不仅让他们有机会自由探索,还能在尝试和发现不同排序方法的过程中找到...

    java 八大排序方法实现

    总结来说,这三种排序算法各有特点,直接插入排序适合小规模或部分有序的数据,希尔排序在效率上优于直接插入排序,而简单选择排序则适用于理解排序概念的初学者。在实际编程中,根据数据特性和性能需求,开发者会...

    比特数据结构课件-Lesson6-排序.pdf

    - **排序概念**:排序是指根据特定的关键字(如数值或字符串)对一系列数据进行升序或降序排列的过程。 - **稳定性**:稳定排序算法保证相等的元素在排序后保持原有的相对顺序,而不稳定排序则不保证这一点。 - *...

    012工作表排序1共1页.pdf.zip

    标题中的“012工作表排序1共1页.pdf.zip”指示了这是一个关于电子表格排序的教程或参考资料,被压缩成ZIP格式,可能包含多个页面,但描述中提到的是“共1页”,这意味着内容可能相对简洁,聚焦在单一的排序概念上。...

    R语言实现冒泡排序算法的详细步骤与注释

    使用场景及目标:本指南适用于任何试图掌握排序概念的人士,在具体实践中,无论是处理小规模还是中型数值列表都非常有用。 额外建议:为加深对排序操作的理解,在动手尝试之前先理解每个指令的具体含义和执行效果。

    幼儿园中班教案《排序》(通用).doc

    尽管这里的排序与计算机科学中的排序算法不同,但孩子们在这个阶段学到的排序概念,其实是未来学习编程、理解复杂问题解决策略的基础。排序能力的培养有助于发展孩子的逻辑思维和解决问题的能力,这对他们的成长至关...

Global site tag (gtag.js) - Google Analytics