当前位置:网站首页>Une compréhension simple du tri rapide
Une compréhension simple du tri rapide
2022-06-23 15:03:00 【Python xxoo】
Partage de ressources de qualité
| Guide d'apprentissage(Cliquez pour déverrouiller) | Positionnement des connaissances | Orientation de la population |
|---|---|---|
| 🧡 PythonApplet de commande de repas Wechat en direct 🧡 | Classe supérieure | Ce cours estpython flask+Une combinaison parfaite d'applets Wechat,De la construction du projet au déploiement de Tencent Cloud en ligne,Créer un système de commande de repas complet. |
| PythonQuantifier les transactions en direct | Niveau d'entrée | Les poignées vous permettent de créer une extension facile、Plus sûr、Un système d'échange quantitatif plus efficace |
Description détaillée
Le tri rapide divise la séquence à organiser en deux parties distinctes par un tri,Les mots - clés d'une partie de la séquence sont plus petits que ceux de l'autre partie de la séquence,Vous pouvez continuer à trier les deux parties de la séquence séparément,Afin d'obtenir l'ordre de toute la séquence.
Les étapes détaillées pour un tri rapide sont les suivantes:
- Choisissez un élément de la séquence,Appelé “Niveau de référence”(pivot);
- Réorganiser la séquence,Tous les éléments inférieurs à la valeur de référence sont placés devant la référence,Tous les éléments supérieurs à la valeur de référence sont placés derrière la référence(Le même nombre peut être de chaque côté).Après la sortie de cette section,La référence est au milieu de la séquence.Ça s'appelle la partition(partition)Fonctionnement;
- Récursivement(recursive) Trier les sous - séquences inférieures à l'élément de référence et les sous - séquences supérieures à l'élément de référence .
Diagramme d'algorithme

Résolution de problèmes
Comment choisir une valeur de référence pour un tri rapide ?
La première façon: Base de sélection de position fixe ; Avec toute la séquence en ordre ,Très inefficace.
La deuxième façon: Choisissez au hasard n'importe quel nombre de la séquence à organiser comme valeur de référence ; Lorsque la séquence tend à être ordonnée , Peut améliorer l'efficacité , Mais quand tout le nombre de séquences est égal , L'efficacité de l'alignement rapide aléatoire est encore très faible .
La troisième façon: Depuis le début de la section 、La queue、Au milieu,Prenez un nombre séparément,Puis comparez la taille,Prends ça. 3 La valeur médiane du nombre comme valeur de référence ; Cette approche résout de nombreux problèmes particuliers , Mais pour les séquences avec beaucoup de valeurs répétées , L'effet n'est toujours pas bon .
Quelles sont les bonnes façons d'optimiser le tri rapide ?
Tout d'abord,, Sélection raisonnable des valeurs de référence , Remplacer la valeur de référence de sélection de position fixe par la méthode de la médiane en trois points , De nombreuses situations particulières peuvent être résolues , Réaliser une partition plus rapide .
Deuxièmement,,Lorsque la longueur de la séquence à trier est divisée en une certaine taille,Tri par insertion. Lorsque la longueur de la séquence à trier est faible ou tend essentiellement à être ordonnée , Le tri des Inserts est plus efficace .
Après tri, Vous pouvez mettre un nombre égal à la valeur de référence ensemble , Ces chiffres peuvent être ignorés lors de la prochaine scission . Très utile pour résoudre les situations où les données sont en double .
Dans la mise en œuvre, Le tri rapide de l'implémentation récursive a deux opérations récursives à la fin de la fonction , Vous pouvez utiliser l'optimisation récursive de la queue (En termes simples, C'est la queue qui s'appelle elle - même ).
Mise en œuvre du Code
| | package cn.fatedeity.algorithm.sort; |
| | |
| | import java.util.Random; |
| | |
| | /** |
| | * Algorithme de tri rapide |
| | */ |
| | public class QuickSort { |
| | private static void swap(int[] numbers, int src, int target) { |
| | int temp = numbers[src]; |
| | numbers[src] = numbers[target]; |
| | numbers[target] = temp; |
| | } |
| | |
| | private static int[] sort(int[] numbers, int low, int high) { |
| | if (low > high) { |
| | return numbers; |
| | } |
| | // Le nombre aléatoire prend la valeur de référence |
| | Random random = new Random(); |
| | int pivotIndex = random.nextInt(low, high + 1); |
| | int pivot = numbers[pivotIndex]; |
| | swap(numbers, pivotIndex, low); |
| | |
| | int mid = low + 1; |
| | for (int i = low + 1; i <= high; i++) { |
| | if (numbers[i] < pivot) { |
| | swap(numbers, i, mid); |
| | mid++; |
| | } |
| | } |
| | swap(numbers, low, --mid); |
| | sort(numbers, low, mid - 1); |
| | sort(numbers, mid + 1, high); |
| | return numbers; |
| | } |
| | |
| | public static int[] sort(int[] numbers) { |
| | return sort(numbers, 0, numbers.length - 1); |
| | } |
| | } |
边栏推荐
- ASP. Net C pharmacy management information system (including thesis) graduation project [demonstration video]
- 【深入理解TcaplusDB技术】TcaplusDB构造数据
- Selenium Edge的IE模式
- 一款自动生成单元测试的 IDEA 插件
- 图解OneFlow的学习率调整策略
- vim备份历史命令
- k8s--部署单机版MySQL,并持久化
- 大厂架构师:如何画一张大气的业务大图?
- Un million de bonus vous attend, le premier concours d'innovation et d'application de la Chine Yuan cosmique Joint Venture Black Horse Hot Recruitment!
- Analysis and solution of connection failure caused by MySQL using replicationconnection
猜你喜欢

乐高宣布涨价,炒家更嗨皮了

SQL injection vulnerability (principle)

JSR303数据校验

How can genetic testing help patients fight disease?

2021-05-08

去 OPPO 面试, 被问麻了。。。

raspberry pi安装 wiringpi

杀入美团、饿了么腹地,京东外卖劲儿有多大?

Babbitt | metauniverse daily must read: meta, Microsoft and other technology giants set up the metauniverse Standards Forum. Huawei and Alibaba joined. NVIDIA executives said that they welcomed partic

ICML 2022 𞓜 context integrated transformer based auction design neural network
随机推荐
乐高宣布涨价,炒家更嗨皮了
2021-05-08
RF analyzer demo setup
Simple tutorial of live streaming with OBS
2021-06-07
MySQL create and manage tables
An idea plug-in for automatically generating unit tests
掌舵9年,艾伦研究所创始CEO光荣退休!他曾预言中国AI将领跑世界
AXI_Round_Robin_Arbiter 设计 - AW、W通道部分
2021-06-07
2021-06-03
系统设计与分析课程项目个人小结
2021-04-15
Pyqt5 工具盒使用
Xampp中mysql无法启动问题的解决方法
【二级等保】过二级等保用哪个堡垒机品牌好?
Short talk about community: how to build a game community?
力扣解法汇总513-找树左下角的值
[in depth understanding of tcapulusdb technology] tcapulusdb business data backup
The principle of redis cache consistency deep analysis