排序算法(冒泡,选择,插入,快速,希尔,堆排序,基数,计数排序 )

时间复杂度为O(n^2)的排序算法:冒泡排序,选择排序,插入排序

数组a[N]中进行冒泡排序

冒泡排序:

  假如数组为[3,7,4,6,8,9,1]-->[3,7,4,6,8,9,1]-->[3,4,7,6,8,9,1]....一直进行下去,相邻2个数进行比较。

  1.第一轮:数组相邻2个元素相比较(a[0]和a[1]比,a[1]和a[2]比,a[2]和a[3]比,a[3]和a[4]比...),较大数往后放,一直相邻比较到数组最后一个数。

    第二轮继续数组相邻比较,此时一直相邻比较到数组倒数第二个元素。

        ...一直到最后一轮只用比较a[0]和a[1]比时,结束。

  在整个数组中进行,a[0]与a[1]比较,较大的数放在a[1],然后a[1]和a[2]进行比较,相等或者较大数放a[2],以此类推一直比较到数组的最后一位,比较完成后此时的数组的最后一个元素就为整个数组的最大数。确定了一个最大数后,在进行冒泡,不过此时进行的范围就是整个数组长度-1的范围内,因为第一轮后我们已经确定了最后一位是最大的,接着进行的是整个数组中第二大的数,它将被放在整个数组的倒数第二位中。依次进行下去,冒泡的范围在数组的第一位时,此时这个数组完成排序。

选择排序:

  假如数组为[3,7,4,6,8,9,1] --->[1,7,4,6,8,9,3]-->[1,3,4,6,8,9,7]--->.....

  找出数组中最小的数,放在第一位上。接下来找数组中除了第一位中最小的数,放在第二位上。以此类推

  1.取出数组中第一个数放入临时变量tmp中,然后遍历数组,遇到比tmp值还小的数,则这个数赋值给tmp,temp中的数为数组最小。并将最小数所在的位置和数组第一的位置的值互换。

  2.取出中第二个数做第一步相同处理。则整个数组中第二小的数放在数组第二位。

3.以此类推

插入排序:

  假如数组为[3,7,4,6,8,9,1]-->[3,7,4,6,8,9,1]-->[3,4,7,6,8,9,1]-->[3,4,6,7,8,9,1]....

  1.从数组中第二个数(下标为1)开始,向前比较(因为第一个数前面没有别的数了,且下标为0),若比第一个数小,则与第一个数交换位置。

  2.从数组中第三个数开始,向前比较,若比第二个数大,则不需要移动位置因为第二个数肯定比第一个数大,若比第二个数小,则还需要比较第一个数,若比第一个数还小则需要和第一个数比较,若比第一个数大,则只需要和第二个数交换位置。

  3.从数组中第n个数比较,若比第n-1大,则继续比较第n-2个。。在代码实现中就是若比前面那个数小则与它互换位置,继续向前比较。直到和第一个数比较。

还有3个算法:快速排序,堆排序,希尔排序。改日更新

还有2个算法:基数排序和计数排序

  

时间: 2024-10-17 16:54:30

排序算法(冒泡,选择,插入,快速,希尔,堆排序,基数,计数排序 )的相关文章

排序算法-冒泡、插入、归并、希尔、快速、选择--代码总结

冒泡排序代码: #include <iostream> #include <string> using namespace std; template<class ItemType> void bubbleSort(ItemType theArray[], int n) { bool sorted = false; // False when swaps occur int pass = 1; while (!sorted && (pass < n

js算法初窥02(排序算法02-归并、快速以及堆排序)

上一篇,我们讲述了一些简单的排序算法,其实说到底,在前端的职业生涯中,不涉及node.不涉及后台的情况下,我目前还真的没想到有哪些地方可以用到这些数据结构和算法,但是我在前面的文章也说过了.或许你用不到,但是,真的,如果你想要在前端领域有一个不错的发展.数据结构和算法一定是你的必修课.它不仅仅让你在处理问题的时候可以有一个思维底蕴,更重要的是,在遇到一些奇葩产品的时候,你可以和他PK到底!嗯,到底! 哈哈,开个小玩笑.咱们还是聊点有营养的.上一篇的算法比较简单,主内容就是循环,次内容就是比较.但

冒泡选择插入快速,四种最基础排序算法实现

<?php /** * Created by PhpStorm. * User: chm * Date: 2016/4/1 * Time: 19:35 */ //插入排序特点是一边是排好顺序的,另一边一个一个和顺序的数据对比,每次对比插入一个 function charu($arr) { $len = count($arr); //先给出一个原数组 echo "原数组为:"; for($y = 0;$y < $len;$y++){ echo $arr[$y]; } echo

java中各种经典排序(冒泡 选择 插入 希尔等)

1 import java.util.Arrays; 2 3 public class ArraySort { 4 public static void main(String[] args) { 5 int[] arr = { 12, 23, 14, 5, 64, 35, 42 }; 6 System.out.println("排序前:"); 7 System.out.println(Arrays.toString(arr)); 8 // bubbleSort(arr); 9 //

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

 写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.因此排序掌握各种排序算法非常重要.对下面介绍的各个排序,我们假定所有排序的关键字都是整数.对传入函数的参数默认是已经检查好了的.只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨. 基础知识: 由于待排序的记录数量不同,使得排序过程中设计的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过程.另一类是外部排序,

python 数据结构与算法之排序(冒泡,选择,插入)

目录 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 数据结构与算法: 算法: 数据结构 冒泡排序法 选择排序法 插入排序法 数据结构与算法之排序(冒泡,选择,插入) 为什么学习数据结构与算法: 计算机重要的几门课: 1.数据结构和算法 2.网络 3.操作系统 4.计算组成原理 数据结构与算法: 算法: 衡量算法的标准: 时间复杂度:就是程序代码执行的大概次数 小结: 时间复杂度是用来估计算法运行时间的一个式子(单位) 一般来说,时间复杂度高的算法比复杂度低的算法慢 常见的

九种经典排序算法详解(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序,计数排序,桶排序,基数排序)

综述 最近复习了各种排序算法,记录了一下学习总结和心得,希望对大家能有所帮助.本文介绍了冒泡排序.插入排序.选择排序.快速排序.归并排序.堆排序.计数排序.桶排序.基数排序9种经典的排序算法.针对每种排序算法分析了算法的主要思路,每个算法都附上了伪代码和C++实现. 算法分类 原地排序(in-place):没有使用辅助数据结构来存储中间结果的排序**算法. 非原地排序(not-in-place / out-of-place):使用了辅助数据结构来存储中间结果的排序算法 稳定排序:数列值(key)

排序算法-冒泡——插入——快排

冒泡排序,往两个方向泡,一个往小泡,一个网大泡 #include<stdio.h> #include<stdlib.h> #include<time.h> void bubble_sort(int *a,int n){ int temp; for(int i=0;i<n;i++) for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } v

冒泡排序,快速排序,归并排序,插入排序,希尔排序,堆排序,计数排序,桶排序,基数排序

选择排序,冒泡排序,快速排序,归并排序,插入排序,希尔排序,计数排序,桶排序,基数排序 以上是一些常用的排序算法. 选择排序 for(int i = 0; i < n; i++) { int minval = a[i]; int minid = i; for (int j = i+1; j < n; j++) { if (a[j] < minval) { minid = j; minval = a[j]; } } swap(a[i], a[minid]); } 最简单的就是选择排序,就是

几种排序算法的C++实现——快速排序、堆排序、基数排序

排序算法是非常常见的面试笔试问题,考查的一个人的基本功,本文将一些排序做了C++的实现,就当是做个学习总结吧. 1.快速排序 快速排序的中心是填坑法,取一个数(这里选取第一个数)作为基准数temp,从队尾开始寻找第一个比基准数小的数a[j],交换a[j]和temp,然后队首开始查找第一个比temp大的数a[i],交换之,遍历的结果是当i>=j时,temp左边的数都小于temp,后边的数都大于temp,这个有点像归并排序.最后利用递归调用完成排序,代码如下: 1 void QuickSort(in