Maison php教程 PHP开发 排序算法入门之冒泡排序

排序算法入门之冒泡排序

Dec 19, 2016 pm 01:13 PM
tri à bulles

在开发中,对一组数据进行有序地排列是经常需要做的事情,所以掌握几种甚至更多的排序算法是绝对有必要的

本文章介绍的是排序算法中较简单的一种算法:冒泡排序

先尝试用最简单的想法去实现排序,以此来比较学习冒泡排序

问题:设有一数组,其大小为10个元素(int   str[10])数组内的数据是无序。现在要求我们通过编程将这个无序的数组变成一个从小到大排序的数组(从下标为0开始)

思路:按照题目的要求,毫无疑问,正确的结果应该就像这样: 1 2 3 4 5 6 7 8 9 10   要做到这样,最简单和最直接想到的方法就是进行对比交换。


首先,把10个数里最小的个数放到下标为0的位置上(str[0])

通过将下标为0的数(str[0])与剩下其余9个数进行对比交换(将较少者放置在下标为0的位置上),就可以得到这10个数最小的那个

10个数最小的那位确定后,接下来就要找剩下9个数最小的那个。

因为已经确定出一个最小的数,所以就不要动str[0],直接从str[1]开始,与剩下的8个数对比交换,找出9个数中最小的那位放到下标为1(str[1])的位置上

继续按照这个思路就可以将这十个数变成有序的(从小到大)的数组

代码:

#include <stdio.h>  
  
void swap(int *a, int *b); //交换两个数  
  
int main()  
{  
    int     str[10];  
    int     i, j;  
    //初始化数组为10 9 8 7 6 5 4 3 2 1  
    for (i = 0; i < 10; i++)  
    {  
        str[i] = 10 - i;  
    }  
    //排序,从a[0]开始排,从小到大  
    for (i = 0; i < 10; i++)  
    {  
        for (j = i + 1; j < 10; j++)  
        {  
            if (str[i] > str[j])  
            {  
                swap(&str[i], &str[j]);  
            }  
        }  
    }  
        //将十个数输出  
    for (i = 0; i < 10; i++)  
        printf("%d\n", str[i]);  
    return    0;  
}  
void swap(int *a, int *b)  
{  
    int     c;  
     c = *a;  
    *a = *b;  
    *b =  c;  
}
Copier après la connexion

这个方法是比较容易想到的实现方法。但存在不足:就是本来位于前面的较小数被交换到后面


演示:

开始:9 4 5 6 8 3 2 7 10 1 (下标从左到右分别是0~9)按照上面的程序进行对比交换

第一次:4 9 5 6 8 3 2 7 10 1

第二次:4 9 5 6 8 3 2 7 10 1

。。。:(没有交换)

第五次:3 9 5 6 8 4 2 7 10 1

第六次:2 9 5 6 8 3 4 7 10 1

。。。:(没有交换)

第十次:1 9 5 6 8 3 4 7 10 2

可以看出,原来较小的数是在前面的,经过一轮的交换后放到后面了

那么怎样解决这个不足呢?可以使用冒泡排序

什么是冒泡排序呢?

你可以这样理解:(从小到大排序)存在10个不同大小的气泡,由底至上地把较少的气泡逐步地向上升,这样经过遍历一次后,最小的气泡就会被上升到顶(下标为0),然后再从底至上地这样升,循环直至十个气泡大小有序。

在冒泡排序中,最重要的思想是两两比较,将两者较少的升上去

冒泡排序最坏情况的时间复杂度是O(n²)

代码:

#include <stdio.h>  
void swap(int *a, int *b);  
int main()  
{  
    int    array[10] = {15, 225, 34, 42, 52, 6, 7856, 865, 954, 10};  
    int    i, j;  
    for (i = 0; i < 10; i++)  
    {  
        //每一次由底至上地上升  
        for (j = 9; j > i; j--)  
        {  
            if (array[j] < array[j-1])  
            {  
                    swap(&array[j], &array[j-1]);  
            }  
        }  
    }  
    for (i = 0; i < 10; i++)  
    {  
        printf("%d\n", array[i]);  
    }  
    return    0;  
}  
void swap(int *a, int *b)  
{  
    int    temp;  
    temp = *a;  
      *a = *b;  
      *b = temp;  
}
Copier après la connexion

冒泡排序算法只会将较少的逐步向上推,不会造成文章前面所说的不足,这里就不给予演示。



更多排序算法入门之冒泡排序相关文章请关注PHP中文网!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Transformez le code avec des pointeurs de fonctions C++ : améliorez l'efficacité et la réutilisabilité Transformez le code avec des pointeurs de fonctions C++ : améliorez l'efficacité et la réutilisabilité Apr 29, 2024 pm 06:45 PM

La technologie des pointeurs de fonction peut améliorer l'efficacité et la réutilisabilité du code, en particulier comme suit : Efficacité améliorée : l'utilisation de pointeurs de fonction peut réduire la répétition du code et optimiser le processus d'appel. Améliorer la réutilisabilité : les pointeurs de fonction permettent d'utiliser des fonctions générales pour traiter différentes données, améliorant ainsi la réutilisabilité du programme.

Structures de données et algorithmes Java : explication détaillée Structures de données et algorithmes Java : explication détaillée May 08, 2024 pm 10:12 PM

Les structures de données et les algorithmes sont à la base du développement Java. Cet article explore en profondeur les structures de données clés (telles que les tableaux, les listes chaînées, les arbres, etc.) et les algorithmes (tels que le tri, la recherche, les algorithmes graphiques, etc.) en Java. Ces structures sont illustrées par des exemples pratiques, notamment l'utilisation de tableaux pour stocker les scores, de listes chaînées pour gérer les listes de courses, de piles pour implémenter la récursion, de files d'attente pour synchroniser les threads, ainsi que d'arbres et de tables de hachage pour une recherche et une authentification rapides. Comprendre ces concepts vous permet d'écrire du code Java efficace et maintenable.

Comment implémenter un algorithme de tri à bulles en C# Comment implémenter un algorithme de tri à bulles en C# Sep 19, 2023 am 11:10 AM

Comment implémenter l'algorithme de tri à bulles en C# Le tri à bulles est un algorithme de tri simple mais efficace qui organise un tableau en comparant plusieurs fois les éléments adjacents et en échangeant leurs positions. Dans cet article, nous présenterons comment implémenter l'algorithme de tri à bulles à l'aide du langage C# et fournirons des exemples de code spécifiques. Tout d’abord, comprenons les principes de base du tri à bulles. L'algorithme part du premier élément du tableau et le compare avec l'élément suivant. Si l'élément actuel est plus grand que l'élément suivant, échangez leurs positions ; si l'élément actuel est plus petit que l'élément suivant, conservez-le.

Guide pour écrire un algorithme de tri personnalisé pour les tableaux PHP Guide pour écrire un algorithme de tri personnalisé pour les tableaux PHP Apr 27, 2024 pm 06:12 PM

Comment écrire un algorithme de tri de tableau PHP personnalisé ? Tri à bulles : trie un tableau en comparant et en échangeant des éléments adjacents. Tri par sélection : sélectionnez à chaque fois l'élément le plus petit ou le plus grand et échangez-le avec la position actuelle. Tri par insertion : insérez les éléments dans une pièce ordonnée un par un.

Analyse de la complexité de divers algorithmes de tri de tableaux PHP Analyse de la complexité de divers algorithmes de tri de tableaux PHP Apr 27, 2024 am 09:03 AM

Complexité de l'algorithme de tri des tableaux PHP : Tri à bulles : O(n^2) Tri rapide : O(nlogn) (moyenne) Tri par fusion : O(nlogn)

Techniques de sélection et d'optimisation d'algorithmes dans l'optimisation des performances des fonctions C++ Techniques de sélection et d'optimisation d'algorithmes dans l'optimisation des performances des fonctions C++ Apr 23, 2024 pm 06:18 PM

Sélection d'algorithmes d'optimisation des performances des fonctions C++ : choisissez des algorithmes efficaces (tels que le tri rapide, la recherche binaire). Compétences en optimisation : intégrer de petites fonctions, optimiser la mise en cache, éviter les copies complètes et dérouler des boucles. Cas pratique : Lors de la recherche de la position maximale des éléments d'un tableau, la recherche binaire et l'expansion de boucle sont utilisées après optimisation, ce qui améliore considérablement les performances.

Analyser la complexité temporelle et la complexité spatiale en langage Go Analyser la complexité temporelle et la complexité spatiale en langage Go Mar 27, 2024 am 09:24 AM

Go est un langage de programmation de plus en plus populaire, conçu pour être facile à écrire, à lire et à entretenir, tout en prenant également en charge des concepts de programmation avancés. La complexité temporelle et la complexité spatiale sont des concepts importants dans l'analyse des algorithmes et de la structure des données. Ils mesurent l'efficacité d'exécution et la taille de la mémoire d'un programme. Dans cet article, nous nous concentrerons sur l’analyse de la complexité temporelle et spatiale dans le langage Go. Complexité temporelle La complexité temporelle fait référence à la relation entre le temps d'exécution d'un algorithme et la taille du problème. Le temps est généralement exprimé en notation Big O

Structures de données et algorithmes Java : un guide pratique du cloud computing Structures de données et algorithmes Java : un guide pratique du cloud computing May 09, 2024 am 08:12 AM

L'utilisation de structures de données et d'algorithmes est cruciale dans le cloud computing pour gérer et traiter d'énormes quantités de données. Les structures de données courantes incluent des tableaux, des listes, des tables de hachage, des arbres et des graphiques. Les algorithmes couramment utilisés comprennent les algorithmes de tri, les algorithmes de recherche et les algorithmes graphiques. En tirant parti de la puissance de Java, les développeurs peuvent utiliser des collections Java, des structures de données thread-safe et des collections Apache Commons pour implémenter ces structures de données et algorithmes.

See all articles