`

简单排序总结

阅读更多

今天重新学习了一下简单排序:冒泡排序、选择排序、插入排序

1.冒泡排序

核心代码:

//a代表数组a,nElems代表数组长度
public void bubbleSort(){
     int out,in;
     for(out=nElems-1;out>1;out--){
           for(in=0;in<out;in++){//先将最大的数据放在最后
                if(a[in]>a[int+1])//比较
                    swap(in,in+1);//交换数据
           }
     }
}

 

思路:将最大的数据放在最后!从后面开始排序

效率:假设数据中有N个数据项,则共做了N*(N-1)/2次比较,交换次数平均大约为N²/4次, 此算法的运行时间为O(N²)

不变性:out右边的所有数据项均为有序

特点:运行比较慢,是排序算法中最简单的

2.选择排序

核心代码:

//a代表数组a,nElems代表数组长度
public void selectionSort(){
     int out,in,min;
     for(out=0;out<nElems-1;out++){
           min = out;//从开始把初值附给min
           //从第out的下一个数开始和min比较,直到找到最小的值
       for(in=out+1;in<nElems;in++){
              if(a[in]<a[min])//如果比a[min]小,则把最小值的下标附给min
                 min = in; 
           }
           swap(out,min);//交换数据
     }
}

  

思路:将最小的数据放在最前面,从前面开始排序

效率:假设数据中有N个数据项,则共做了N*(N-1)/2次比较,但交换比冒泡排序少的多O(N)!算法的运行时间为O(N²)

不变性:下标小于或等于out的数据项总是有序的

特点:运行比冒泡快一点

3.插入排序

 

核心代码:

//a代表数组a,nElems代表数组长度
public void insertionSort(){
     int out,in;
     for(out=1;out<nElems;out++){
           long temp = a[out];//声明一个被标记的变量
       in = out;//从out开始
       while(in>0&&a[in-1]>=temp){
                a[in] = a[in-1]//a[in]如果比a[in-1]小,则进行附值,直接替换
           --in; //in自减1,意思是向左移一位
       }
           a[in] = temp;//in已经找到位置,左边的都是比a[in]小的
     }
}

   

思路:选择一个标记,在这个标记的左边已经是局部有序的了,然而左边数据的最终位置还没有确定!

效率:假设数据中有N个数据项,则共做了N*(N-1)/4次比较,但交换比冒泡排序少的多O(N)!算法的运行时间为O(N²)

对于有序或者基本有序的数据来说,插入排序要好的多,只需要O(N)的时间。

不变性:在每次结束时,在将temp位置的项插入后,比outer变量下标小的数据项总是局部有序的

特点:相对于随机数据,运行比冒泡快一倍,比选择排序要快一点

  • 描述: 冒泡排序图
  • 大小: 66 KB
  • 描述: 选择排序图
  • 大小: 87 KB
  • 描述: 插入排序图
  • 大小: 71.9 KB
0
0
分享到:
评论

相关推荐

    简单排序算法简介

    ### 简单排序算法简介 #### 一、简单排序算法概述 在计算机科学领域,**排序算法**是一类非常基础且重要的算法。这类算法旨在将一组无序的数据按照特定的顺序进行排列。由于实际应用中往往需要处理大量的数据,...

    八大排序算法总结

    【排序算法总结】 排序是计算机科学中的一项基本操作,它涉及到如何有效地重新排列一组数据,使其按照特定的顺序排列。本文将重点介绍八大排序算法,包括插入排序、希尔排序、交换排序、快速排序、选择排序、堆排序...

    堆排序总结 堆排序总结

    ### 堆排序总结 #### 1. 堆排序定义 堆排序是一种基于比较的排序算法,它利用了一种特殊的完全二叉树结构——堆(heap)来组织数据。在一个堆中,每个节点的关键字都不大于(对于大根堆)或都不小于(对于小根堆)...

    C#排序算法总结

    直接插入排序是最简单的插入排序方法,其基本思想是把待排序的记录插入到已排好序的有序表中,从而得到一个新的、记录数增加1的有序表。 直接插入排序的C#实现代码如下: ```csharp public static void InsertSort...

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

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

    qsort总结.pdf快速排序总结qsort总结.pdf快速排序总结

    对于整型数组的排序非常简单,主要通过定义比较函数实现。 ```c int num[100] = { /* 初始化数组 */ }; int cmp(const void *a, const void *b) { return *(int *)a - *(int *)b; // 返回值为负表示a小于b;为零...

    几种排序算法总结及比较

    快速排序通常被认为是最快的通用排序算法,但在某些特定情况下,如数据量较小或内存有限时,其他简单排序算法可能会更合适。因此,了解这些排序算法的原理和性能特点对于编写高效的代码至关重要。

    查找與排序 总结(c语言版)

    本文将对C语言中实现查找与排序的几种常见方法进行总结。 首先,顺序查找是一种简单直观的查找方法,适用于无序数组。顺序查找的基本思想是从数组的第一个元素开始,逐个与目标值进行比较,如果找到匹配,则返回该...

    十大经典排序算法总结.docx

    《十大经典排序算法总结》 排序算法是计算机科学的基础,其设计思想和效率对软件的性能有着直接影响。本文主要探讨了十种经典的排序算法,包括它们的设计思路、优缺点以及适用场景,帮助我们理解排序算法的核心。 ...

    排序算法总结.doc

    插入排序是一种简单的排序算法,其时间复杂度为O(n^2)。它通过将每个元素插入到已排序的部分中找到正确位置来工作,保持已排序部分的稳定性。当数组近乎有序时,插入排序表现出较好的性能。由于它主要涉及元素的...

    常见排序方法总结(c版)

    在本文档中,我们主要探讨了四种经典的排序算法:冒泡排序、简单选择排序、快速排序和堆排序,这些算法都是在C语言环境下实现的。排序算法是计算机科学中的基础内容,它们对于组织和处理大量数据至关重要。 1. **...

    各种排序算法总结(ppt)

    在这个名为“各种排序算法总结(ppt)”的资料中,我们将会深入探讨多种常见的排序算法,包括它们的基本原理、优缺点以及实际应用。** 首先,我们要了解排序的目的是为了使数据有序,这在数据处理和分析中具有广泛...

    数据结构排序问题实现总结.doc

    例如,冒泡排序是一种简单的交换排序,通过重复遍历序列并交换相邻的逆序元素来实现排序;快速排序则采用了分治策略,通过选取一个基准元素并将其与其他元素进行比较,将序列划分为两部分,然后对这两部分进行递归...

    常用排序算法总结

    ### 常用排序算法总结 #### 一、冒泡排序 冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,依次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要...

    排序学习总结.

    ### 排序学习总结 #### 一、概述 本文旨在对常见的排序算法...例如,对于小规模数据,可以直接使用简单排序算法如插入排序或选择排序;而对于大规模数据,则应考虑使用更高效的排序算法,如快速排序或归并排序等。

    排序查找算法总结

    排序查找算法总结 排序算法是计算机科学中的一种基本算法,用于对数据进行排序。在各种排序算法中,每种算法都有其特点和应用场景。本文将对10种经典的排序算法进行总结,并对每种算法的时间复杂度、空间复杂度和...

    Java 基础各种排序总结

    例如,对于小规模数据,简单排序算法可能就足够了;而对于大规模数据,快速排序或归并排序可能是更好的选择。 了解并掌握这些排序算法,不仅可以提高代码效率,也有助于培养分析问题和解决问题的能力。在编程竞赛或...

    选择排序(内包含有:简单选择排序,堆排序的C++代码实现)

    总结来说,选择排序和堆排序都是常见的排序算法,各有优缺点。选择排序简单直观,但效率较低;堆排序虽然复杂度更优,但在实际应用中可能因为元素交换较多而效率不高。在实际编程中,应根据具体场景选择合适的排序...

Global site tag (gtag.js) - Google Analytics