hdu 1425

Description du problème

Donnez-vous n entiers, veuillez afficher le nombre avec le m le plus élevé dans l'ordre décroissant.

Contribution

Chaque groupe de données de test comporte deux lignes, la première ligne contient deux nombres n, m (0 <n, m <1000000) et la deuxième ligne contient n entiers différents et compris dans l'intervalle [-500000,500000] .

Production

Pour chaque groupe de données de test, indiquez le nombre m supérieur dans l'ordre décroissant.

Exemple d'entrée

5 3 3 -35 92 213 -644

Exemple de sortie

213 92 3

Cette question est très simple, l'idée est de trier le tableau, puis de sortir. Ici, je compare en utilisant la méthode de tri de la classe Arrays et en effectuant un tri rapide aléatoire.

1. Triez à l'aide de Array.sort ():

package hdu;

import java.util.Arrays;
import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n, m;
		int[] a;
		while(sc.hasNextInt()) {
			n = sc.nextInt();
			m = sc.nextInt();
			a = new int[n];
			for(int i=0; i<n; i++){
				a[i] = sc.nextInt();
			}
			Arrays.sort(a);
			for(int i=n-1; i>=n-m; i--) {
				if(i==n-m) System.out.println(a[i]);
				else System.out.print(a[i]+" ");
			}
		}
	}
}

résultat:

1. Écrivez votre propre algorithme de tri rapide aléatoire pour trier:

package hdu;

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;

public class HDU1425 {
	private static void sort(int[] array, int p, int q) {
		int temp = array[q];
		array[q] = array[p];
		array[p] = temp;
	}

	private static int QuickSort(int[] array, int p, int q) {
		int i = p + 1, j = p, x = array[p];
		while (i <= q) {
			if (array[i] < x) {
				j++;
				sort(array, j, i);
			}
			i++;
		}
		sort(array, p, j);
		return j;
	}

	private static int randomPartition(int[] array, int p, int q) {
		int r = 0;
		Random ra = new Random();
		int i = ra.nextInt(q - p) + p;
		sort(array, p, i);
		return QuickSort(array, p, q);
	}

	private static void randomizeQuickSort(int[] array, int p, int q) {
		if (p < q) {
			int r = randomPartition(array, p, q);
			randomizeQuickSort(array, p, r);
			randomizeQuickSort(array, r + 1, q);
		} else
			return;
	}
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int n, m;
		int[] a;
		while(sc.hasNextInt()) {
			n = sc.nextInt();
			m = sc.nextInt();
			a = new int[n];
			for(int i=0; i<n; i++){
				a[i] = sc.nextInt();
			}
			randomizeQuickSort(a,0,n-1);
			for(int i=n-1; i>=n-m; i--) {
				if(i==n-m) System.out.println(a[i]);
				else System.out.print(a[i]+" ");
			}
		}
	}
}

résultat:

On peut le voir d'après les résultats: Exe.Time et Exe.Memory sont presque les mêmes. Après avoir compris et vu le code source, Array.sort () utilise également le tri rapide, qui est un tri rapide sur deux axes.

Je suppose que tu aimes

Origine blog.csdn.net/VinWqx/article/details/86749000
conseillé
Classement