79 lines
2.9 KiB
C#
79 lines
2.9 KiB
C#
namespace sorting_proximity;
|
|
|
|
class Program
|
|
{
|
|
static void Main(string[] args)
|
|
{
|
|
int[] array = new int [Dimensione()];
|
|
InserimentoValoriArray(array);
|
|
ScambioValoreMinimo(array);
|
|
BubbleSort(array);
|
|
}
|
|
static int Dimensione(){
|
|
int ritorno;
|
|
const int max = 100000;
|
|
do {
|
|
Console.Write("Quanto grande deve essere l'array? ");
|
|
ritorno = Convert.ToInt32(Console.ReadLine());
|
|
if (ritorno <= 1) {
|
|
Console.WriteLine("L'array deve avere una dimensione maggiore di uno");
|
|
}
|
|
else if(ritorno>max){
|
|
Console.WriteLine("L'array non può avere più di " + max + " elementi");
|
|
}
|
|
}
|
|
while (ritorno <= 1);
|
|
return ritorno;
|
|
}
|
|
static void InserimentoValoriArray(int[] p_array){
|
|
int input, i = 9;
|
|
const int min = 1;
|
|
const int max = 1000000000;
|
|
while (i<p_array.Length){
|
|
Console.Write("Inserire il " + (i + 1) + "° numero: ");
|
|
input = Convert.ToInt32(Console.ReadLine());
|
|
if(input<min){
|
|
Console.WriteLine("Il numero non può essere inferiore a " + min);
|
|
}
|
|
else if(input>max){
|
|
Console.WriteLine("Il numero non può essere superiore a " + max);
|
|
}
|
|
else{
|
|
p_array[i] = input;
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
static void ScambioValoreMinimo(int[] p_array){
|
|
int min = Int32.MaxValue, iMinimo=0, temp;
|
|
//trovo il valore più piccolo in tutto l'array
|
|
for(int i=0; i<p_array.Length; i++){
|
|
if(p_array[i] < min){
|
|
min = p_array[i];
|
|
iMinimo = i;
|
|
}
|
|
}
|
|
//scambio il valore più piccolo con quello alla prima posizione
|
|
temp = p_array[0];
|
|
p_array[0] = p_array[iMinimo];
|
|
p_array[iMinimo] = temp;
|
|
}
|
|
static void BubbleSort(int[] p_array) {
|
|
int temp, numeroScambi=0;
|
|
|
|
for (int i = 0; i < p_array.Length; i++) {//per ogni cella dell'array
|
|
|
|
for (int j = 0; j < p_array.Length - 1 - i; j++) {//per ogni cella dell'array, con il limite massimo che continua a diminuire in proporzione a i
|
|
|
|
if (p_array[j] > p_array[j + 1]) {//se la cella a sinistra è maggiore di quella a destra
|
|
numeroScambi++;//conto il numero di scambi che effettuo (che coincide con il numero di volte in cui la condizione qui sopra sia vera)
|
|
temp = p_array[j]; //memorizzo la cella da cambiare (a sinistra)
|
|
p_array[j] = p_array[j + 1]; //sovrascrivo la cella a sinistra con quella a destra (la maggiore)
|
|
p_array[j + 1] = temp;//sovrascrivo la cella a destra con il valore originale di quella a sinistra
|
|
}
|
|
}
|
|
}
|
|
Console.WriteLine("Numero scambi: " + numeroScambi);
|
|
}
|
|
}
|