Skip to main content

1. Organisez les concepts de base

Supposons maintenant qu'il y a une chaîne {R1, R2, .. rn}, maintenant {k1, k2, .. kn}. Il est nécessaire d'identifier un, 2, .. N, P1, P2, .. PN, le faire correspondant aux mots-clés KP1 & LT; = Kp2 & lt; = Kp3 & lt; = ... & lt; = KPN, même la chaîne est une chaîne triée dans un mot-clé, appelé tri.


1. 1 STABILITY TRY
Le mot clé est divisé en mot-clé principal et le deuxième mot clé, le mot-clé principal n'est qu'un, mais le nombre de sous-caractères illimité. Étant donné que les arrangements ne sont pas seulement pour la clé principale, il sera trié par le deuxième mot clé. Il peut y avoir deux mots clés ou plus, tels que deux mots-clés ou plus dans la séquence de séquence, seront disposés et les résultats de tri seront uniques. Si les deux valeurs de chaîne sont disposées devant le mot-clé, lors de la prise en sorte que le tri est toujours devant le type B et stable; Si l'arrangement A est atteint ultérieurement, le type est instable ..


] Agencement interne subtil
est dans l'ensemble du processus d'organisation, tous les enregistrements seront disposés en mémoire. Le routage externe est le nombre d'enregistrements enregistrés comme trop et ne peut pas être placé dans la même mémoire simultanément et que tout le processus d'organisation nécessite beaucoup de données d'échange internes et externes.

1.3 Type d'algorithme d'arrangement

Arrangez pour lancer le calme, sept algorithmes, des catégories spécifiques telles que:


1.3 .1 Insérer des classes

Insérez la classification de la classe centralisée pour insérer ces deux mots, à savoir l'ordre déjà commandé, insérez le nouveau mot-clé, en insérant des mots-clés par rapport à chaque prix TRI de la séquence classée, de trouver des moyens d'insérer des positions appropriées, de sorte que toute la séquence après l'insertion est toujours en ordre. L'insertion directe, le pliage et l'explication de cette classe appartiennent à cette classe.

1.3.2 Agencement d'échange

Exchange 排 点 这 小 小 小 小小 小小 小小 小小 小小 小小 小小 小小 小小 小小 小小Répétez ce processus pour eUne fois la chaîne entière dans l'ordre. Arrangez des bulles et organiser rapidement appartenir rapidement à ce type disposé.

1.3.3 Choisissez une classe d'arrangement


Concentrez-la de la sélection du type de classe dans la sélection de ces deux mots, en sélectionnant le minimum des cordes verticales (ou la plus grande fée à la tête. (ou la dernière dans la chaîne) Echanger des mots-clés, un tel mot-clé minimum (ou maximum) est placé en ordre ultérieur, à vélo en cours jusqu'à ce que la chaîne entière soit agencée. Soumettre une simple empilement automatique appartient à ce type de classification.


1.3.4 Tri Seule
La disposition est une combinaison de deux chaînes ou de plusieurs séquences classées dans une nouvelle série


1. Structure et fonctions pour trier des algorithmes
Pour trier le tableau de séquence, cette structure sera utilisée pour suivre toutes les commandes à mentionner la structure.

L'opération la plus courante pour organiser consiste à échanger deux éléments des tableaux et à écrire ceci Processus de conversion pour faciliterFacile à appeler.

2. Insérer TRY
2. Organisez l'insertion directement
#define MAXSIZE 10 //要排序数组个数最大值typedef struct{ int r[MAXSIZE + 1]; //用来存储要排序数组 int length; //用来记录顺序表长度} Semblable directement à notre parcours de conversation Lorsque nous jouons au poker, nous sommes généralement une étiquette et une carte insérée directement dans le Séquence qui sera insérée dans la séquence précédente en insérant une nouvelle carte (données à être périodiquement). Le processus d'insertion spécifique est le suivant:
Étape 1: à partir du premier élément, le premier élément par défaut à la commande;

Étape 2: Supprimer l'élément suivant sous forme d'élément inséré, qui sera ensuite inséré l'élément par rapport à chaque élément de sa chaîne précédente (c'est-à-dire que toutes les valeurs ont été insérées dans la chaîne). Si la valeur de l'élément inséré est inférieure à celle qu'elle a été arrangée devant elle, elle sera dans la séquence. Les chiffres sont déplacés, jusqu'à inutilement, le nouvel élément est inséré dans la vacance;

Répétez les étapes2 jusqu'à ce que toutes les valeurs de la chaîne insérée soient toutes insérées. void swap(SqList *L,int i,int j){ int temp = L->r[i]; L->r[i] = L->r[j] L->r[j] = temp;}
Le code est le suivant:
2.2 DMerci d'ordre ordonné
La séquence pliante améliorée sur la base du tri direct d'insertion, l'insertion directe se passe par chaque valeur à trier et que l'ordre plié disposé est inséré dans l'insert de tri chaque fois que vous trouvez l'emplacement actuel, dans Fait, c'est un moyen de trouver des racines dans nos études secondaires.

Sort de la colline

Arrangez l'insertion directement dans une efficacité de base élevée, telle que l'ordre de base, nous effectuons uniquement une petite quantité d'insertion de fonctionnement; Ou si l'enregistrement est très rare, un effet d'insertion directement est également assez élevé. Toutefois, les données dans la pratique sont difficiles à respecter ces deux conditions. Les gens doivent donc organiser des données dans des données pour répondre à ces deux conditions.

Comment puis-je faire trier des enregistrements? Simple. Cette méthode est le nombre original d'enregistrements d'enregistrements, divisé en plusieurs séquences, de sorte que le nombre de journaux soit trié moins, puis trier l'insert peut être utilisé directement dans chaque groupe et quand il est grand.Les ensembles de chaînes sont essentiellement ordonnés, tous les enregistrements sont insérés dans un insert direct. Nous appelons cela comme un arrangement de colline. void Insertsort(int R[],int n)//R[]用来存放待插入排序的所有值{ int i,j; int temp; //用来存放待插入值 for(i = 1;i < n;++i) { temp = R[i];//待插入值为序列R[]中的第i个值 j = i - 1;//待插入数值前一位 while(j>=0&&temp<R[j])//当待插入值temp小于它前面的数时,前面的数就需要后移 { R[j+1] = R[j]; --j;//通过前移遍历已排序好的序列中的每一个值 } R[j+1] = temp;//将temp插入到R[j+1]的位置 }}
Le problème est maintenant le groupe de données racine. Si la distance directe ou autre est coupée, telle que la chaîne d'origine est {9, 1, 5, 8, 3, 7, 4, 6, 2}, maintenant elles sont coupées en tricy, {9, 1, 5}, {8, 3, 7}, {4, 6, 2} et trois groupes utilisés pour être utilisés dans le tri directement pour devenir {1, 5, 9}, {3, 7, 8}, {2, 4, 6} , puis combiner trois groupes pour devenir {1, 5, 9, 3, 7, 8, 2, 4, 6}, cette séquence est toujours très désordonnée, mais également pour insérer des arrangements dans l'insertion directe de cette séquence, mais cette séquence et la La séquence originale après la coupe n'est pas trop grande, principalement parce que nous coupons des niveaux de coupe isométrique. Pour éviter ce cas après la découpe, nous avons démarré le colis avec un type de distance de séparation, telle que le nombre d'options 1, 3, 5 positions sous forme d'épisode 2, 4, 6 positions sous forme d'un tel procédé de saut. Le code suit:
3.Arrangez la classe d'échange
3.1 Commandes à bassourée


L'arrangement à bulles est une sorte d'échange, son idée de base a: deux mots-clés deux deux mots-clés sont comparés et si la séquence inverse est échangée jusqu'à ce qu'il y ait Pas de profil à l'intérieur.

Les étapes suivantes:

Étape 1: À partir du premier bit, deux deux comparent des valeurs adjacentes, si deux valeurs descendantes, échangeant les positions de chacun jusqu'à ce que le dernier bit, ce dernier est définitivement la valeur maximale;

Étape 2: Étant donné que le dernier bit a une valeur maximale, d'autres valeurs sont à nouveau exécutées en plus de la fin;

Étape 3: Répétez les étapes ci-dessus1, étape2 jusqu'à ce que toutes les valeurs soient disposées.

3.1.1 Bulles la plupart des bulles de base disposées par

Chaque valeur de la chaîne est déplacée, puis la valeur est comparée à chacune de ses chaînes arrière, si elle est grande plus que l'échange de l'autre.

void ShellSort(SqList *L){ int i,j; int incremrnt = L->length; do { incremrnt = increment/3+1; //间隔序列 for(i=increment+1;i<L-length;i++) { if(L->r[i]<L->[i-increment]) { L->r[0]=L->r[i]; for(j=i-increment;j>0&&L->r[0]<L->r[j];j-=increment) L->r[j+increment]=L->r[j]; //记录后移,查找插入位置 L->r[j+increment]=L->r[0]; //插入 } } }}
Cet algorithme n'est pas une bulle stricte, parce qu'ilSi vous rencontrez des idées de bulles organisant deux ou deux enregistrements adjacents.

3.1.2 Agencement de bulles ordinaire

Le processus d'arrangement officiel de bulle basé sur les étapes de base de la classification de bulles à l'avant. Le code est le suivant:


Le code codant sur la comparaison de transmission finale de l'extrémité inférieure, comparez d'abord le deuxième bit de l'avant-dernier avec les bits précédents, la valeur que j'ai utilisée pour contrôler le nombre de chiffres. des valeurs non comparables (c'est-à-dire que le nombre de bits a un niveau maximum), juste la valeur I-Boot est 1, montrant toutes les valeurs numériques Oui liées à des arrangements et après une achèvement complexe (c.-à-d. J pour le cycle est terminé une fois), ma valeur est ajoutée 1 et le nombre de participants en comparaison est 1 et le processus, jusqu'à ce que toutes les valeurs soient triées (c'est-à-dire que la valeur de I est plus grande ou égale à la longueur de la chaîne à trié).


3.1.3 Version améliorée de l'ordre à bulles
Dans notre classification habituelle de bulle, seule la dernière personne ne participe pas à l'arrangement, à l'exception des autres extrémités autres que l'autre que l'autre doit participer à la classification, que ce soit ou non, quelles que soient ou non les autres cordes, la première place est tout ou partie d'eux,Pouvez-vous encore comparer? La réponse est définitivement, il suffit d'ajouter un signe pour déterminer quelle partie de la chaîne est la séquence.
void BubbleSort0(SqList *L){ int i,j; for(i=1;i<L-length;i++) { for(j=i+1;j<L-length;j++) { if(L->r[i] > L->r[j]) { swap(L,i,j) } } }} 3.2 Arrangement rapide

Enfin, la ligne légendaire finale a finalement été arrangée rapidement, qui était l'une des classes intéressantes. Disposez rapidement lorsque vous commencez à trier, vous choisirez d'abord une valeur intermédiaire M (Notez que la valeur intermédiaire ici n'est pas la valeur moyenne), en utilisant généralement le premier numéro de la colonne pour trier, chaque séquence sera commandée à chaque fois. Divisé en deux parties, tous sont supérieurs à la valeur moyenne m, tandis que toutes les valeurs de l'autre sont plus petites que la valeur intermédiaire M, puis créez les marchandisesH Dans ces deux sections et trouvez simultanément une valeur intermédiaire M, puis effectuez des sections de temps, répétez cette procédure jusqu'à la fin de toutes les chaînes et de recevoir finalement une commande de chaîne et que le code enregistré sont les suivants:



void BubbleSort(SqList *L){ int i,j; for(i=1;i<L-length;i++) { for(j=L-length-1;j>=i;j--) { if(L->r[j] > L->r[j+1]) //注意这里是比较j与j+1 { swap(L,j,j+1); //交换L->r[j]与L->r[j+1]的位置 } } }}
4. Choisissez d'organiser la classe
4.1 Séquence simple


Les bulles inverse sont échangées tout en comparant un certain temps, tant que la valeur arrière apparaît plus petite que la valeur précédente, les deux être échangé, puis continuer à comparer; Et le segment simple consiste à comparer certaines positions avec le nombre de positions, si le nombre de la chaîne est inférieur au nombre de positions, sinon, entrez la boucle suivante, cette méthode est un peu similaire à la base de bulles de tri. Il suffit de choisir l'ordre des bulles est le processus d'ignorer beaucoup d'échange. Le code est le suivant:
4.2 Triez HEAP
void BubbleSort2(SqList *L){ int i,j; Status flag = True; //flag用来标记哪部分是已排序好的 for(i=1,i<L-length&&flag;i++) { flag = False; for(j=L->length-1;j>=i;j--) { if(L->r[j] > L->r[j+1]) { swap(L[j],L[j+1]) flag = True } } }} Dans la sélection simple précédente, sélectionnez l'enregistrement minimum dans N enregistrera des enregistrements triés.Une fois, continuez de comparer N-2 fois dans l'enregistrement N-1 restant pour avoir le deuxième minimum. Chaque fois que vous devez comparer le reste de la valeur, vous choisirez au minimum le reste. Mais en fait, certaines valeurs ont été contrastées, n'ont pas besoin de comparer à nouveau. Si vous pouvez vous adapter à la valeur de comparaison, vous pouvez éviter de nombreuses comparaisons inutiles. Pile d'habitudes spéciales Pour résoudre ce problème, les habitudes d'empilement sont une version simple de la version améliorée.

4.2.1 Concept de tas


Le tas est un arbre binaire complet avec la nature suivante: chacun plus grand ou égal à l'enfant gauche et droit sa valeur est appelée grand top tas; Ou la valeur de chaque bouton est inférieure ou égale à la valeur des enfants gauche et droit, appelé une petite tête. void QuickSort(int R[],int low,int high){ int temp; int i = low;j = high; if(low < high) { temp = R[low];//序列的第一个值作为中间值 while(i<j) { while(j>i&&R[j]>=temp)//从右往左寻找小于temp的值 --j; if(i<j) { R[i]=R[j];//放在temp左边 ++i;//i后移一位 } while(i<j&&R[i]<temp)//从左往右寻找大于temp的值 ++i; if(i<j) { R[j]=R[i];//放在temp右边 --j;//左移一位 } } } R[i] = temp;//将temp挡在最终位置 QuickSort(R,low,i-1);//对temp左边的值再执行快排 QuickSort(R,i+1,high);//对temp右边的值再执行快排}

4.2.2 Classification du tas

La pile est une méthode de tri en utilisant un tas. Son idée de base est de former un grand tas de soumissionSoi sera arrangé. De cette manière, la valeur maximale de la chaîne entière est le bouton d'origine du haut. Retrait du bouton d'origine, le bouton d'origine est optimisé, puis récupéré les chaînes N-1 restantes dans un tas, le bouton d'origine de la nouvelle pile est la valeur maximale de la nouvelle pile et de la valeur secondaire dans l'élément N Ceci. Ceci est répété, une commande de commande peut être prise. Pour taper le tas, c'est vraiment deux étapes. La première étape consiste à convertir les données triées en une grande pile. La deuxième étape consiste à éliminer progressivement les nœuds racines de chaque valeur maximale et à régler à nouveau. Pour les meilleurs piles haut. Le code est le suivant: La fonction de tasadjust identifie le code 5. Organisez plusieurs colonnes La commande multiple est la mathématique, arrangée de nombreuses manières. Nous expliquons la consolidation à double sens la plus simple: commencez par diviser d'abord toute la chaîne en deux moitiés et arrangez la moitié, cela entraînera deux chaînes ordonnées, puis ces séquences ont cette commande classée dans une chaîne. StockerDéclaration spécifique est la suivante:

Sujets

Catégories