1. Description de l'algorithme
Sélectionnez le tri: par exemple, dans un tableau non ordonné de longueur n, traversez N données dans le premier voyage, découvrez la plus petite valeur et échangez-les avec le premier élément, le deuxième voyage traverse les données N-1 restantes, découvrez la plus petite valeur et les échangez avec le deuxième élément ... le N-1st Traverse les deux autres données, le plus petit est achevé et les échanger avec le N-1e élément, et la sélection du tri est terminée.
Les 5 données non ordonnées suivantes sont utilisées comme exemples:
56 12 80 91 20 (Le processus de sélection du premier voyage n'est affiné que dans l'article)
1er voyage: 12 56 80 91 20
2e voyage: 12 20 80 91 56
Trip 3: 12 20 56 91 80
4ème voyage: 12 20 56 80 91
2. Analyse d'algorithme
Complexité du temps moyen: O (N2)
Complexité de l'espace: O (1) (pour les index d'échange et d'enregistrement)
Stabilité: instable (par exemple, les premiers [5] et [3] sont échangés lors du premier voyage de la séquence [5, 5, 3], provoquant le déplacement des 5 premiers derrière les 5 secondes)
3. Implémentation d'algorithme
classe publique SELECTIONNETORT {public static void main (String [] args) {int len = 15; int [] ary = new int [len]; Aléatoire aléatoire = nouveau aléatoire (); pour (int j = 0; j <len; j ++) {ary [j] = random.nextint (1000); } System.out.println ("------------------"); // ary = new int [] {10,9,8,7,6,5,4,3,2,1}; // Échanges de test // ary = new int [] {1,2,3,4,5,6,7,8,10,9}; // Test des échanges pour (int j = 0; j <ary.length; j ++) {System.out.print (ary [j] + ""); } selectDesc (ary); selectasc (ary); } / * * SELECT SORT: DESCENDING * / static void selectDesc (int [] ary) {int compareCount = 0; // Comparez Times int ChangeCount = 0; // Nombre d'échanges int len = ary.length; int maxValueIndex = -1; // Enregistrez l'indice de valeur minimale après une série de comparaisons pour (int i = 0; i <len - 1; i ++) {maxValueIndex = i; // de 0 pour (int j = i + 1; j <len; j ++) {if (ary [maxValueIndex] <ary [j]) {maxValueIndex = j; // enregistre l'index plus grand CompareCount ++; }} // System.out.println ("minValueIndex ==" + maxValueIndex); if (maxValueIndex! = i) {// Si l'index est différent de l'enregistrement à gauche, échangez ary [i] = ary [maxValueIndex] + (ary [maxValueIndex] = ary [i]) * 0; // ExchangeCount de change ++ en une étape; }} System.out.println ("/ n --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (int i = 0; i <len - 1; i ++) {minindex = i; ary [minindex] + (ary [minindex] = ary [i]) * 0; System.out.println ("/ n ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- pour (int j = 0; j <ary.length; j ++) {System.out.print (ary [j] + ""); }}}Imprimer
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------