first part lab 12
This commit is contained in:
parent
0cb43a08c5
commit
3a28323d25
BIN
bin/lab12_sort/ArrayFactory.class
Normal file
BIN
bin/lab12_sort/ArrayFactory.class
Normal file
Binary file not shown.
BIN
bin/lab12_sort/BubbleSort.class
Normal file
BIN
bin/lab12_sort/BubbleSort.class
Normal file
Binary file not shown.
BIN
bin/lab12_sort/FusionSort.class
Normal file
BIN
bin/lab12_sort/FusionSort.class
Normal file
Binary file not shown.
BIN
bin/lab12_sort/SelectionSort.class
Normal file
BIN
bin/lab12_sort/SelectionSort.class
Normal file
Binary file not shown.
BIN
bin/lab12_sort/SortApplication.class
Normal file
BIN
bin/lab12_sort/SortApplication.class
Normal file
Binary file not shown.
BIN
bin/tools/Chrono.class
Normal file
BIN
bin/tools/Chrono.class
Normal file
Binary file not shown.
34
src/lab12_sort/ArrayFactory.java
Normal file
34
src/lab12_sort/ArrayFactory.java
Normal file
@ -0,0 +1,34 @@
|
||||
package lab12_sort;
|
||||
|
||||
import java.util.Random;
|
||||
|
||||
public abstract class ArrayFactory {
|
||||
static int[] createRandomArray(int size, int maxValue){
|
||||
int[] array = new int[size];
|
||||
Random r = new Random();
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
array[i] = r.nextInt(maxValue);
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
static int[] createInvertedSortedArray(int size){
|
||||
int[] array = new int[size];
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
array[i] = size-i-1;
|
||||
}
|
||||
return array;
|
||||
}
|
||||
|
||||
static int[] createShuffleArray(int size){
|
||||
int[] array = new int[size];
|
||||
for (int i = 0; i < array.length; i++) {
|
||||
if(i%2 == 0){
|
||||
array[i] = i/2;
|
||||
} else {
|
||||
array[i] = (size-1)-(i/2);
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
}
|
19
src/lab12_sort/BubbleSort.java
Normal file
19
src/lab12_sort/BubbleSort.java
Normal file
@ -0,0 +1,19 @@
|
||||
package lab12_sort;
|
||||
|
||||
public abstract class BubbleSort {
|
||||
static public int[] sort(int[] array){
|
||||
boolean shorted = false;
|
||||
while (shorted == false) {
|
||||
shorted = true;
|
||||
for (int i = 0; i < array.length-1; i++) {
|
||||
if (array[i] > array[i+1]) {
|
||||
int tmp = array[i];
|
||||
array[i] = array[i+1];
|
||||
array[i+1] = tmp;
|
||||
shorted = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return array;
|
||||
}
|
||||
}
|
68
src/lab12_sort/FusionSort.java
Normal file
68
src/lab12_sort/FusionSort.java
Normal file
@ -0,0 +1,68 @@
|
||||
package lab12_sort;
|
||||
|
||||
public abstract class FusionSort {
|
||||
private static void fusion(int tab[], int debut, int milieu, int fin) {
|
||||
int n1 = milieu - debut + 1;
|
||||
int n2 = fin - milieu;
|
||||
|
||||
int G[] = new int[n1];
|
||||
int D[] = new int[n2];
|
||||
|
||||
for (int i = 0; i < n1; i++)
|
||||
G[i] = tab[debut + i];
|
||||
|
||||
for (int j = 0; j < n2; j++)
|
||||
D[j] = tab[milieu + 1 + j];
|
||||
|
||||
// maintient trois pointeurs, un pour chacun des deux tableaux et un pour
|
||||
// maintenir l'index actuel du tableau trié final
|
||||
int i, j, k;
|
||||
i = 0;
|
||||
j = 0;
|
||||
k = debut;
|
||||
|
||||
while (i < n1 && j < n2) {
|
||||
if (G[i] <= D[j]) {
|
||||
tab[k] = G[i];
|
||||
i++;
|
||||
} else {
|
||||
tab[k] = D[j];
|
||||
j++;
|
||||
}
|
||||
k++;
|
||||
}
|
||||
|
||||
// Copiez tous les éléments restants du tableau non vide
|
||||
while (i < n1) {
|
||||
tab[k] = G[i];
|
||||
i++;
|
||||
k++;
|
||||
}
|
||||
|
||||
while (j < n2) {
|
||||
tab[k] = D[j];
|
||||
j++;
|
||||
k++;
|
||||
}
|
||||
}
|
||||
|
||||
// Tri par fusion
|
||||
private static void triFusion(int tab[], int debut, int fin) {
|
||||
|
||||
if (debut < fin) {
|
||||
|
||||
// Trouvez le point milieu pour diviser le tableau en deux moitiés
|
||||
int m = (debut + fin) / 2;
|
||||
|
||||
triFusion(tab, debut, m);
|
||||
triFusion(tab, m + 1, fin);
|
||||
|
||||
// Fusionnez les deux moitiés triées
|
||||
fusion(tab, debut, m, fin);
|
||||
}
|
||||
}
|
||||
|
||||
static public void sort(int[] array){
|
||||
triFusion(array, 0, array.length - 1);
|
||||
}
|
||||
}
|
20
src/lab12_sort/SelectionSort.java
Normal file
20
src/lab12_sort/SelectionSort.java
Normal file
@ -0,0 +1,20 @@
|
||||
package lab12_sort;
|
||||
|
||||
public abstract class SelectionSort {
|
||||
static public int[] sort(int[] array){
|
||||
for (int i = 0; i < array.length-1; i++) {
|
||||
int min = array[i];
|
||||
int iMin = i;
|
||||
for (int j = i; j < array.length; j++) {
|
||||
if(array[j] < min){
|
||||
min = array[j];
|
||||
iMin = j;
|
||||
}
|
||||
}
|
||||
int tmp = array[i];
|
||||
array[i] = array[iMin];
|
||||
array[iMin] = tmp;
|
||||
}
|
||||
return array;
|
||||
}
|
||||
}
|
107
src/lab12_sort/SortApplication.java
Normal file
107
src/lab12_sort/SortApplication.java
Normal file
@ -0,0 +1,107 @@
|
||||
package lab12_sort;
|
||||
|
||||
import tools.Chrono;
|
||||
|
||||
public class SortApplication {
|
||||
public static void main(String[] args) {
|
||||
long[][][] selection = new long[3][451][10];
|
||||
long[][][] bubble = new long[3][451][10];
|
||||
long[][][] yShort = new long[3][451][10];
|
||||
long[][][] fusion = new long[3][451][10];
|
||||
|
||||
for (int iValue = 450; iValue >= 0; iValue--) {
|
||||
int value = iValue*200 + 10000;
|
||||
//int value = iValue*10 + 100;
|
||||
Chrono valueChrono = new Chrono();
|
||||
long sortTime = 0;
|
||||
|
||||
for (int iAttempt = 0; iAttempt < 10; iAttempt++) {
|
||||
for (int iTable = 0; iTable < 3; iTable++){
|
||||
int[] arrayIN;
|
||||
switch (iTable) {
|
||||
case 0:
|
||||
arrayIN = ArrayFactory.createRandomArray(value, value);
|
||||
break;
|
||||
case 1:
|
||||
arrayIN = ArrayFactory.createInvertedSortedArray(value);
|
||||
break;
|
||||
case 2:
|
||||
arrayIN = ArrayFactory.createShuffleArray(value);
|
||||
break;
|
||||
|
||||
default:
|
||||
arrayIN = null;
|
||||
break;
|
||||
}
|
||||
Chrono sort = new Chrono();
|
||||
|
||||
Chrono selectionChrono = new Chrono();
|
||||
SelectionSort.sort(arrayIN);
|
||||
selection[iTable][iValue][iAttempt] = selectionChrono.stop();
|
||||
|
||||
Chrono bubbleChrono = new Chrono();
|
||||
BubbleSort.sort(arrayIN);
|
||||
bubble[iTable][iValue][iAttempt] = bubbleChrono.stop();
|
||||
|
||||
Chrono yShortChrono = new Chrono();
|
||||
YSort.sort(arrayIN);
|
||||
yShort[iTable][iValue][iAttempt] = yShortChrono.stop();
|
||||
|
||||
Chrono fusionChrono = new Chrono();
|
||||
FusionSort.sort(arrayIN);
|
||||
fusion[iTable][iValue][iAttempt] = fusionChrono.stop();
|
||||
|
||||
sortTime = sort.stop();
|
||||
}
|
||||
}
|
||||
|
||||
long[][] selectionAverage = new long[3][451];
|
||||
long[][] bubbleAverage = new long[3][451];
|
||||
long[][] yShortAverage = new long[3][451];
|
||||
long[][] fusionAverage = new long[3][451];
|
||||
|
||||
for(int iTable = 0; iTable < 3; iTable++){
|
||||
for(int j = 0; j < 10; j++){
|
||||
selectionAverage[iTable][iValue] += selection[iTable][iValue][j];
|
||||
bubbleAverage[iTable][iValue] += bubble[iTable][iValue][j];
|
||||
yShortAverage[iTable][iValue] += yShort[iTable][iValue][j];
|
||||
fusionAverage[iTable][iValue] += fusion[iTable][iValue][j];
|
||||
}
|
||||
selectionAverage[iTable][iValue] /= 10.0;
|
||||
bubbleAverage[iTable][iValue] /= 10.0;
|
||||
yShortAverage[iTable][iValue] /= 10.0;
|
||||
fusionAverage[iTable][iValue] /= 10.0;
|
||||
|
||||
print(value, iTable, "Selection", selectionAverage[iTable][iValue]);
|
||||
print(value, iTable, "Bubble ", bubbleAverage[iTable][iValue]);
|
||||
print(value, iTable, "YShort ", yShortAverage[iTable][iValue]);
|
||||
print(value, iTable, "Fusion ", fusionAverage[iTable][iValue]);
|
||||
System.out.println("");
|
||||
}
|
||||
System.out.println("Total time for sort " + value + ": " + sortTime/1000000.0 + " s");
|
||||
System.out.println("Total time for " + value + ": " + valueChrono.stop()/1000000.0 + " s");
|
||||
System.out.println("---------- ---------- ----------\n");
|
||||
}
|
||||
}
|
||||
|
||||
static void print(int value, int iTable, String name, long average){
|
||||
System.out.print(name + "");
|
||||
System.out.print("\tTable: " + iTable + " | Value: " + value);
|
||||
System.out.print(" -> [us] " + average);
|
||||
System.out.print("\n");
|
||||
}
|
||||
|
||||
static void displayArray(int[] array){
|
||||
int size = array.length;
|
||||
String s = "Size ";
|
||||
s += size;
|
||||
s += ": {";
|
||||
for (int i = 0; i < array.length-1; i++) {
|
||||
s += array[i];
|
||||
s += ", ";
|
||||
}
|
||||
s += array[size-1];
|
||||
s += "}";
|
||||
System.out.println(s);
|
||||
}
|
||||
}
|
38
src/tools/Chrono.java
Normal file
38
src/tools/Chrono.java
Normal file
@ -0,0 +1,38 @@
|
||||
package tools;
|
||||
|
||||
public class Chrono {
|
||||
private long start, end, total;
|
||||
private String name = null;
|
||||
|
||||
public Chrono(String name){
|
||||
this.name = name;
|
||||
start = System.nanoTime();
|
||||
}
|
||||
public Chrono(){
|
||||
start = System.nanoTime();
|
||||
}
|
||||
|
||||
/**
|
||||
* Stop the chrono and return the total time in us
|
||||
* @return the total length in us
|
||||
*/
|
||||
public long stop(){
|
||||
end = System.nanoTime();
|
||||
total = (long) ((end - start)/1000.0);
|
||||
return total;
|
||||
}
|
||||
|
||||
public String toString(){
|
||||
String s = "";
|
||||
if (name == null){
|
||||
s += total;
|
||||
s += " uS";
|
||||
} else {
|
||||
s += name;
|
||||
s += " : \t";
|
||||
s += total;
|
||||
s += " uS";
|
||||
}
|
||||
return s;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user