Principes fondamentaux de la structure des données et des algorithmes (Wang Zhuo) (30) : aperçu du tri (classification), idées de tri par insertion directe

Table des matières

Tri et classement : (contenu de ce chapitre)

Par support de stockage de données : (contenu d'apprentissage)

Tri interne :

Tri externe :

Selon le nombre de comparateurs : (contenu d'apprentissage)

Tri en série :

Tri parallèle :

Selon l'opération principale : (le contenu d'apprentissage et le tri à l'intérieur seront axés sur l'apprentissage)

Comparer le tri :

Tri par base :

Par espace auxiliaire :

Trier sur place :

Sortir de place :

Par stabilité :

Tri stable :

 Tri instable :

Par nature:

tri par insertion

Conditions préalables :

1. Tri par insertion directe

Le train de pensée est le suivant :


Tri et classement : (contenu de ce chapitre)


Par support de stockage de données : (contenu d'apprentissage)

Tri interne :

La quantité de données est petite, les données sont dans la mémoire et il n'est pas nécessaire d'échanger des données entre la mémoire interne et externe

Tri externe :

Grande quantité de données, données dans un stockage externe (tri de fichiers)

Lors du tri de la mémoire externe, les données doivent être chargées dans la mémoire par lots pour le tri, et les résultats intermédiaires doivent être placés dans la mémoire externe à temps, ce qui est plus compliqué

Les données ne tiennent pas dans la mémoire :

Trier une partie de la mémoire et mettre les données dans la mémoire externe après le tri

Prenez une autre pièce du stockage externe, puis effectuez un tri (nouveau tour)


Selon le nombre de comparateurs : (contenu d'apprentissage)

Tri en série :

Processeur unique (comparant une paire d'éléments en même temps)

Tri parallèle :

Multiprocesseur (comparant plusieurs paires d'éléments en même temps)


Selon l'opération principale : (le contenu d'apprentissage et le tri à l'intérieur seront axés sur l'apprentissage)

Comparer le tri :

tri par insertion, tri par permutation, tri par sélection, tri par fusion

Tri par base :

Ne comparez pas la taille de l'élément, déterminez uniquement sa position ordonnée en fonction de la valeur de l'élément lui-même


Par espace auxiliaire :

Trier sur place :

La quantité d'espace auxiliaire est O(1), ce qui n'a rien à voir avec la taille des données à trier

Sortir de place :

La quantité d'espace auxiliaire dépasse O(1), ce qui est lié à la taille des données à trier


Par stabilité :

Tri stable :

Éléments qui peuvent rendre n'importe quelle valeur égale, l'ordre relatif reste inchangé après le tri

 Tri instable :

Les éléments avec des valeurs égales changeront dans l'ordre relatif après le tri


Par nature:

Tri naturel :

Plus les données d'entrée sont ordonnées, plus la vitesse de tri est rapide

Ordre non naturel :

Plus les données d'entrée sont ordonnées, plus la vitesse de tri est lente


tri par insertion


Conditions préalables :

Structure de stockage : stockée dans une table séquentielle

#include<iostream>
using namespace std;

#define MAXSIZE 20  //记录最大个数
typedef int KeyType;  //关键字类型

typedef int InfoType;

//定义每个记录(数据元素)的结构
struct RecType
    //Record Type:每条记录的类型
{
    KeyType key;  //关键字
    InfoType otherinfo;  //其他数据项
};

struct SqList 
    //顺序表(的)结构
{
    RecType r[MAXSIZE + 1]; 
    //类型为【记录类型】的数组
    //r[0]一般做哨兵或缓冲区
    int length;  //顺序表长度
};

int main()
{

}

1. Tri par insertion directe

Selon le PPT, trier

Le train de pensée est le suivant :

Bien sûr, le "16" ici n'est en fait qu'un doigt virtuel, qui pointe vers (représente) tous les nombres (objets) que nous utilisons pour comparer avec 7 


D'après ce qui est indiqué à la page 23 du PPT, il est évident que :

La lettre i est utilisée pour représenter : la queue (queue de séquence) de la liste ordonnée (table de séquence) avant chaque cycle

Utilisez la lettre j pour représenter (compléter) l'ensemble du processus/opération de "insérer"

Puis (encore) selon le 27e rappel de PPT, et les leçons apprises basées sur notre algorithme de recherche précédent :

Nous devons utiliser la sentinelle ici


Enfin, le cadre de base du programme est organisé comme suit :

Supplément : ajouter sentinelle

Pour plusieurs éléments à insérer :
configurez :

Le pointeur i pointe vers la fin de la séquence séquentielle/ordonnée ;
le pointeur j pointe vers le nouvel élément :

Note:

L'algorithme conçu à l'origine ne tenait pas compte de la commodité que nous pouvons utiliser la sentinelle ;
maintenant, nous n'avons plus besoin de configurer un pointeur vers l'élément nouvellement inséré, il suffit de mettre l'élément nouvellement inséré dans la sentinelle

Alors maintenant, nous sommes sûrs :

  • Placez l'élément nouvellement inséré dans la sentinelle (position avec ordre de bit 0)
  •  j pointe vers (la position de) l'élément que nous comparons avec l'élément nouvellement inséré dans la séquence triée
  • Comparez l'élément sentinelle (bit d'ordre 0) avec l'élément pointé par le pointeur j
  1. Si supérieur ou égal à : (l'élément sentinelle est supérieur ou égal à l'élément pointé par le pointeur j)
    【Échange d'éléments】

    Déplace tous les éléments de la séquence ordonnée après j et j vers l'arrière d'un bit

    (Parce que le nouvel élément à insérer a déjà été placé dans la sentinelle, nous n'avons pas à nous soucier de la perte de données si nous reculons d'un bit)

    Insérez l'élément sentinelle à la position pointée par le pointeur j

    REMARQUE : N'oubliez pas (i++) ! ! !
     

  2. Si inférieur à : (l'élément sentinelle est inférieur à l'élément pointé par le pointeur j)
    [Continuer à comparer, comparer avec le précédent]

    j-- ;

  3. je++

Je suppose que tu aimes

Origine blog.csdn.net/Zz_zzzzzzz__/article/details/130280707
conseillé
Classement