小肥羊算法学习01-----冒泡排序

  冒泡算法,顾名思义,就是按一定的顺序排列的数据。

算法思路:

  假设有一个这样的数组

int[] arr = {5, 9, 3, 1, 2, 6, 7, 4, 8};

  根据算法定义,我们需要的输出为

int[] arr = {1, 2, 3, 4, 5, 6, 7, 8, 9};

  首先,拿到我们原数组。先判断arr[0]和arr[1]的大小。如果arr[0]>arr[1],则交换他们的位置。然后再比较arr[1]和arr[2]的大小,如果arr[1]>arr[2],则交换他们的位置。以此类推,在遍历一次数组之后,就可以将最大的数放到数组的最后。此时这个步骤被执行了arr.Length-1次,既8次。然后执行第二轮,将第二大的数字通过遍历比较数组大小移到数组的倒数第二的位置。以此类推就可以将给定的数组按照冒泡排序排列成新的顺序。

  关于时间复杂度的计算:

    第一轮执行了m次,第二轮执行了m-1次,一共执行了m轮。

    所以对应的时间复杂度为:O((1+m)/2)*m。忽略较小的常数,则冒泡排序的时间复杂度为O(m^2)

附上C#实现的代码:

    

        static int[] arr = { 5, 9, 3, 1, 2, 6, 7, 4, 8 };
        static void Main(string[] args)
        {
            for (int i = 0; i < arr.Length - 2; i++)
            {
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                    if (arr[j] < arr[j + 1])
                    {
                        Bubbling(j, j + 1);
                    }
                }
            }
            foreach (var a in arr)
            {
                Console.WriteLine(a);
            }
            Console.Read();
        }
        static void Bubbling(int one, int two)
        {
            int buff = arr[one];
            arr[one] = arr[two];
            arr[two] = buff;
        }
时间: 2024-10-12 05:32:22

小肥羊算法学习01-----冒泡排序的相关文章

算法学习 - 01背包问题(动态规划C++)

动态规划 01背包 问题描述 求解思路 代码实现 放入哪些物品 代码 动态规划 我在上一篇博客里已经讲了一点动态规划了,传送门:算法学习 - 动态规划(DP问题)(C++) 这里说一下,遇到动态规划应该如何去想,才能找到解决办法. 最主要的其实是要找状态转移的方程,例如上一篇博客里面,找的就是当前两条生产线的第i个station的最短时间和上一时刻的时间关系. minTime(station[1][i]) = minTime(station[1][i-1] + time[i], station[

算法学习01:二分查询,选择法、插入法、分治法排序

查询与排序是使用的再频繁不过的两个功能,算法学习系列实现语言为C#. 一般情况下的查询 Int32 Search(Int32[] source, Int32 task) { var index = 0; while (index < source.Length) if (source[index++] == task) return index - 1; //返回值为Length则说明未找到 return source.Length; } 时间复杂度为O(n),在检索源没有排序的情况下,这即为最

算法学习之冒泡排序的C实现

冒泡排序是属于比较类的排序方式,简单易懂,但是效率不是很高,不及快排. #include "stdio.h" #include "time.h" void bubble(int *a,int len);//排序 void swap(int *p1,int *p2);//交换数值 int main() { clock_t start,finish; double totaltime; start=clock(); int a[] = {5,45,12,36,2,7,9

【排序算法】01冒泡排序

先定义一个排序器接口IArraySorter: 1 package org.liws1.sort; 2 3 import java.util.Comparator; 4 5 /** 6 * 排序器接口 7 */ 8 public interface IArraySorter { 9 public <T extends Comparable<T>> void sort(T[] list); 10 public <T> void sort(T[] list, Compara

经典算法学习——非循环双向链表实现冒泡排序(不带头结点)

我在前面两篇博客<经典算法学习--单链表(不带头结点)实现冒泡排序><经典算法学习--单链表实现冒泡排序(带头结点)>中详细描述了分别使用带头结点和不带头结点的单链表实现了冒泡排序,让我们对单链表和冒泡排序有了理性的认识.今天我们将会来使用不带头结点的非循环双向链表来实现冒泡排序,在处理过程中,这种冒泡比前面两种更为简单高效.代码上传至 https://github.com/chenyufeng1991/DoubleLinkedList_BubbleSort . 核心代码如下: /

八大排序算法学习笔记:冒泡排序

冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法. 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 算法原理: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有

经典算法学习——链表实现冒泡排序

我在之前一篇博客<经典算法学习--冒泡排序>中简单实现了使用数组进行冒泡排序.这篇博客我们将来实现使用链表如何排序,其实整体的思路是一样的.示例代码上传至: https://github.com/chenyufeng1991/BubbleSortLinkedList . 算法描述如下: (1)比较相邻的前后两个数据,如果前面数据大于后面的数据,就将两个数据交换: (2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就到了最后一个位置,也就是下标为N-1的位置(沉到了水底).

经典排序算法学习笔记之一——冒泡排序

一.冒泡排序 1.算法思想: 冒泡排序算法的运作如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数. 针对所有的元素重复以上的步骤,除了最后一个. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较. 2.伪代码: function bubble_sort (array, length) { var i, j; for(i from 0 to length-1){ for

Python之路,Day21 - 常用算法学习

Python之路,Day21 - 常用算法学习 本节内容 算法定义 时间复杂度 空间复杂度 常用算法实例 1.算法定义 算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制.也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出.如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题.不同的算法可能用不同的时间.空间或效率来完成同样的任务.一个算法的优劣可以用空间复杂度与时间复杂度来衡量. 一个算