首页 php教程 PHP开发 冒泡排序的三种实现

冒泡排序的三种实现

Dec 19, 2016 pm 01:15 PM
冒泡排序

冒泡排序是非常容易理解和实现,,以从小到大排序举例:

设数组长度为N。

1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。

2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。

3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

 

按照定义很容易写出代码:

//冒泡排序1  
void BubbleSort1(int a[], int n)  
{  
       int i, j;  
       for (i = 0; i < n; i++)  
              for (j = 1; j < n - i; j++)  
                     if (a[j - 1] > a[j])  
                            Swap(a[j - 1], a[j]);  
}
登录后复制

下面对其进行优化,设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。

//冒泡排序2  
void BubbleSort2(int a[], int n)  
{  
       int j, k;  
       bool flag;  
  
       k = n;  
       flag = true;  
       while (flag)  
       {  
              flag = false;  
              for (j = 1; j < k; j++)  
                     if (a[j - 1] > a[j])  
                     {  
                            Swap(a[j - 1], a[j]);  
                            flag = true;  
                     }  
              k--;  
       }  
}
登录后复制

再做进一步的优化。如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。

//冒泡排序3  
void BubbleSort3(int a[], int n)  
{  
    int j, k;  
    int flag;  
      
    flag = n;  
    while (flag > 0)  
    {  
        k = flag;  
        flag = 0;  
        for (j = 1; j < k; j++)  
            if (a[j - 1] > a[j])  
            {  
                Swap(a[j - 1], a[j]);  
                flag = j;  
            }  
    }  
}
登录后复制

冒泡排序毕竟是一种效率低下的排序方法,在数据规模很小时,可以采用。数据规模比较大时,最好用其它排序方法。


更多冒泡排序的三种实现相关文章请关注PHP中文网!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java数据结构与算法:深入详解 Java数据结构与算法:深入详解 May 08, 2024 pm 10:12 PM

数据结构和算法是Java开发的基础,本文深入探讨Java中的关键数据结构(如数组、链表、树等)和算法(如排序、搜索、图算法等)。这些结构通过实战案例进行说明,包括使用数组存储分数、使用链表管理购物清单、使用栈实现递归、使用队列同步线程以及使用树和哈希表进行快速搜索和身份验证等。理解这些概念可以编写高效且可维护的Java代码。

如何实现C#中的冒泡排序算法 如何实现C#中的冒泡排序算法 Sep 19, 2023 am 11:10 AM

如何实现C#中的冒泡排序算法冒泡排序是一种简单但有效的排序算法,它通过多次比较相邻的元素并交换位置来排列一个数组。在本文中,我们将介绍如何使用C#语言实现冒泡排序算法,并提供具体的代码示例。首先,让我们了解一下冒泡排序的基本原理。算法从数组的第一个元素开始,与下一个元素进行比较。如果当前元素比下一个元素大,则交换它们的位置;如果当前元素比下一个元素小,则保持

用 C++ 函数指针改造代码:提升效率和可复用性 用 C++ 函数指针改造代码:提升效率和可复用性 Apr 29, 2024 pm 06:45 PM

函数指针技术可提升代码效率和可复用性,具体表现为:提升效率:使用函数指针可减少重复代码,优化调用过程。提高可复用性:函数指针允许使用通用函数处理不同数据,提高程序的可复用性。

PHP 数组自定义排序算法的编写指南 PHP 数组自定义排序算法的编写指南 Apr 27, 2024 pm 06:12 PM

如何编写自定义PHP数组排序算法?冒泡排序:通过比较和交换相邻元素来排序数组。选择排序:每次选择最小或最大元素并将其与当前位置交换。插入排序:逐个插入元素到有序部分。

各种 PHP 数组排序算法的复杂度分析 各种 PHP 数组排序算法的复杂度分析 Apr 27, 2024 am 09:03 AM

PHP数组排序算法复杂度:冒泡排序:O(n^2)快速排序:O(nlogn)(平均)归并排序:O(nlogn)

分析 Go 语言中的时间复杂度和空间复杂度 分析 Go 语言中的时间复杂度和空间复杂度 Mar 27, 2024 am 09:24 AM

Go语言是一种越来越流行的编程语言,它被设计成易于编写、易于阅读和易于维护的语言,同时也支持高级编程概念。时间复杂度和空间复杂度是算法和数据结构分析中重要的概念,它们衡量着一个程序的执行效率和占用内存大小。在本文中,我们将重点分析Go语言中的时间复杂度和空间复杂度。时间复杂度时间复杂度是指算法执行时间与问题规模之间的关系。通常用大O表示法来表示时间

C++ 函数性能优化中的算法选择与优化技巧 C++ 函数性能优化中的算法选择与优化技巧 Apr 23, 2024 pm 06:18 PM

C++函数性能优化算法选择:选择高效算法(如快速排序、二分查找)。优化技巧:内联小型函数、优化缓存、避免深拷贝、循环展开。实战案例:查找数组最大元素位置时,优化后采用二分查找和循环展开,大幅提升性能。

Java数据结构与算法:云计算实战指南 Java数据结构与算法:云计算实战指南 May 09, 2024 am 08:12 AM

云计算中数据结构和算法的使用至关重要,用于管理和处理海量数据。常见的数据结构包括数组、列表、哈希表、树和图。常用的算法有排序算法、搜索算法和图算法。利用Java的强大功能,开发者可以使用Java集合、线程安全数据结构和ApacheCommonsCollections来实现这些数据结构和算法。

See all articles