Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ///////// Sort
- import java.util.List;
- import java.util.Scanner;
- public class Sort {
- private int CheckingNumber=0;
- private int ReplaceNumber=0;
- public void chooseInt(List<Integer> list){ //сортировка выбором чисел
- long start=System.currentTimeMillis();
- System.out.println("ДО: "+ list);
- boolean check=false;
- int replace=0;
- int checking=0;
- while (!check){
- check=true;
- for(int i=1;i<list.size();i++) {
- if (list.get(i) <list.get(i - 1)) {
- replace++;
- checking++;
- int value = list.get(i - 1);
- list.set(i - 1, list.get(i));
- list.set(i, value);
- check=false;
- }
- else
- checking++;
- }
- }
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+checking);
- System.out.println("Количество обменов: "+replace);
- System.out.println();
- }
- private void chooseString(List<String> list){ //сортировка выбором строк
- long start=System.currentTimeMillis();
- System.out.println("ДО: "+ list);
- int replace=0;
- int checking=0;
- boolean check=false;
- while (!check){
- check=true;
- for(int i=1;i<list.size();i++) {
- if (list.get(i).length() <list.get(i - 1).length()) {
- replace++;
- checking++;
- String value = list.get(i - 1);
- list.set(i - 1, list.get(i));
- list.set(i, value);
- check=false;
- }
- else
- checking++;
- }
- }
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+checking);
- System.out.println("Количество обменов: "+replace);;
- System.out.println();
- }
- private void quickSortInt(List<Integer> arr, int low, int high) {
- if (arr == null || arr.size() == 0){
- CheckingNumber++;
- return;
- }
- if (low >= high){
- CheckingNumber++;
- return;
- }
- int middle = low + (high - low) / 2;
- int pivot = arr.get(middle);
- int i = low, j = high;
- while (i <= j) {
- while (arr.get(i) < pivot) {
- CheckingNumber++;
- i++;
- }
- while (arr.get(j) > pivot) {
- CheckingNumber++;
- j--;
- }
- if (i <= j) {
- CheckingNumber++;
- ReplaceNumber++;
- int temp = arr.get(i);
- arr.set(i,arr.get(j));
- arr.set(j,temp);
- i++;
- j--;
- }
- }
- if (low < j){
- CheckingNumber++;
- quickSortInt(arr, low, j);
- }
- if (high > i){
- CheckingNumber++;
- quickSortInt(arr, i, high);
- }
- }
- private void quickSortString(List<String> arr, int low, int high) {
- if (arr == null || arr.size() == 0){ CheckingNumber++;
- return;
- }
- if (low >= high){
- CheckingNumber++;
- return;
- }
- int middle = low + (high - low) / 2;
- String pivot = arr.get(middle);
- int i = low, j = high;
- while (i <= j) {
- while (arr.get(i).length() < pivot.length()) { CheckingNumber++;
- i++;
- }
- while (arr.get(j).length() > pivot.length()) { CheckingNumber++;
- j--;
- }
- if (i <= j) { CheckingNumber++;ReplaceNumber++;
- String temp = arr.get(i);
- arr.set(i,arr.get(j));
- arr.set(j,temp);
- i++;
- j--;
- }
- }
- if (low < j){ CheckingNumber++;
- quickSortString(arr, low, j);
- }
- if (high > i){
- CheckingNumber++;
- quickSortString(arr, i, high);
- }
- }
- private void quickInt(List<Integer> list){ // быстрая сортировка чисел
- long start=System.currentTimeMillis();
- System.out.println("ДО: "+ list);
- quickSortInt(list,0,list.size()-1);
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+CheckingNumber);
- System.out.println("Количество обменов: "+ReplaceNumber);
- System.out.println();
- CheckingNumber=0;
- ReplaceNumber=0;
- }
- private void quickString(List<String> list){ //быстрая сортировка строк
- long start=System.currentTimeMillis();
- System.out.println("ДО: "+ list);
- quickSortString(list,0,list.size()-1);
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+CheckingNumber);
- System.out.println("Количество обменов: "+ReplaceNumber);
- System.out.println();
- CheckingNumber=0;
- ReplaceNumber=0;
- }
- private void shellSortString(List<String> list) { //сортировка Шелла строк
- long start=System.currentTimeMillis();
- int replaceNumber=0;
- int checkingNumber=0;
- System.out.println("ДО: "+ list);
- int h = 1;
- while (h*3 < list.size())
- h = h * 3 + 1;
- while(h >= 1) {
- int length = list.size();
- for (int i = h; i < length; i++) {
- for (int j = i; j >= h; j = j - h) {
- if (list.get(j).length() < list.get(j-h).length()){
- String value=list.get(j);
- list.set(j,list.get(j-h));
- list.set(j-h,value);
- checkingNumber++;
- replaceNumber++;
- }
- else{
- checkingNumber++;
- break;
- }
- }
- }
- h = h/3;
- }
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+checkingNumber);
- System.out.println("Количество обменов: "+replaceNumber);
- System.out.println();
- }
- private void shellSortInt(List<Integer> list) { //сортировка Шелла чисел
- long start=System.currentTimeMillis();
- int replaceNumber=0;
- int checkingNumber=0;
- System.out.println("ДО: "+ list);
- int h = 1;
- while (h*3 < list.size())
- h = h * 3 + 1;
- while(h >= 1) {
- int length = list.size();
- for (int i = h; i < length; i++) {
- for (int j = i; j >= h; j = j - h) {
- if (list.get(j) < list.get(j-h)){
- int value=list.get(j);
- list.set(j,list.get(j-h));
- list.set(j-h,value);
- checkingNumber++;
- replaceNumber++;
- }
- else{
- checkingNumber++;
- break;
- }
- }
- }
- h = h/3;
- }
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+checkingNumber);
- System.out.println("Количество обменов: "+replaceNumber);
- System.out.println();
- }
- private void ProxMapSortInt(List<Integer> list){//сортировка ProxMap чисел
- long start=System.currentTimeMillis();
- int replaceNumber=0;
- int checkingNumber=0;
- System.out.println("ДО: "+ list);
- for (int left = 0; left < list.size(); left++) {
- int minInd = left;
- for (int i = left; i < list.size(); i++) {
- if (list.get(i) < list.get(minInd)) {
- checkingNumber++;
- minInd = i;
- }
- }
- int value= list.get(left);
- list.set(left,list.get(minInd));
- list.set(minInd, value);
- replaceNumber++;
- }
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+checkingNumber);
- System.out.println("Количество обменов: "+replaceNumber);
- System.out.println();
- }
- private void ProxMapSortString(List<String > list){//сортировка ProxMap строк
- long start=System.currentTimeMillis();
- int replaceNumber=0;
- int checkingNumber=0;
- System.out.println("ДО: "+ list);
- for (int left = 0; left < list.size(); left++) {
- int minInd = left;
- for (int i = left; i < list.size(); i++) {
- if (list.get(i).length() < list.get(minInd).length()) {
- checkingNumber++;
- minInd = i;
- }
- }
- String value= list.get(left);
- list.set(left,list.get(minInd));
- list.set(minInd, value);
- replaceNumber++;
- }
- long finish=System.currentTimeMillis();
- System.out.println("После: "+list);
- System.out.println("Время выполнения: "+(finish-start));
- System.out.println("Количество проверок: "+checkingNumber);
- System.out.println("Количество обменов: "+replaceNumber);
- System.out.println();
- }
- public void choosingMenu() {
- Scanner sc = new Scanner(System.in);
- int choose1 = -1;
- while (true) {
- Rand rand=new Rand();
- System.out.println("Выберете тип объекта, с которым нужно проводить сортировку: ");
- System.out.println("Массив чисел-1");
- System.out.println("Массив строк-2");
- System.out.println("Список чисел-3");
- System.out.println("Список строк-4");
- System.out.println("Выход-5");
- choose1 = sc.nextInt();
- if (choose1 == 5)
- break;
- System.out.println("Введите размерность массива: ");
- int size = sc.nextInt();
- while(true) {
- System.out.println("Выберете метод сортировки");
- System.out.println("Сортировка выбором-1");
- System.out.println("Сортировка Шелла-2");
- System.out.println("Быстрая сортировка (разделитель слева)-3");
- System.out.println("Proxmap-сортировка-4");
- System.out.println("Выход на предыдащий шаг-5");
- int choose2 = sc.nextInt();
- if(choose2==5)
- break;
- else if (choose1 == 1) {
- List<Integer> list = rand.randomArrayListInt(size);
- if (choose2 == 1) {
- chooseInt(list);
- } else if (choose2 == 2) {
- shellSortInt(list);
- } else if (choose2 == 3) {
- quickInt(list);
- } else if (choose2 == 4) {
- ProxMapSortInt(list);
- }
- } else if (choose1 == 2) {
- List<String> list = rand.randomArrayListString(size);
- if (choose2 == 1) {
- chooseString(list);
- } else if (choose2 == 2) {
- shellSortString(list);
- } else if (choose2 == 3) {
- quickString(list);
- } else if (choose2 == 4) {
- ProxMapSortString(list);
- }
- } else if (choose1 == 3) {
- List<Integer> list = rand.randomLinkedListInt(size);
- if (choose2 == 1) {
- chooseInt(list);
- } else if (choose2 == 2) {
- shellSortInt(list);
- } else if (choose2 == 3) {
- quickInt(list);
- } else if (choose2 == 4) {
- ProxMapSortInt(list);
- }
- } else if (choose1 == 4) {
- List<String> list = rand.randomLinkedListString(size);
- if (choose2 == 1) {
- chooseString(list);
- } else if (choose2 == 2) {
- shellSortString(list);
- } else if (choose2 == 3) {
- quickString(list);
- } else if (choose2 == 4) {
- ProxMapSortString(list);
- }
- }
- }
- }
- }
- }
- ////////// Rand
- import java.util.ArrayList;
- import java.util.LinkedList;
- public class Rand {
- public ArrayList<Integer> randomArrayListInt(int size){
- ArrayList<Integer> arr=new ArrayList<>();
- for(int i=0;i<size;i++){
- arr.add((int)(Math.random()*200+1));
- }
- return arr;
- }
- public LinkedList<Integer> randomLinkedListInt(int size){
- LinkedList<Integer> arr=new LinkedList<>();
- for(int i=0;i<size;i++){
- arr.add((int)(Math.random()*200+1));
- }
- return arr;
- }
- public ArrayList<String > randomArrayListString(int size){
- ArrayList<String> arr=new ArrayList<>();
- for(int i=0;i<size;i++){
- arr.add(randomString());
- }
- return arr;
- }
- public LinkedList<String> randomLinkedListString(int size){
- LinkedList<String> arr=new LinkedList<>();
- for(int i=0;i<size;i++){
- arr.add(randomString());
- }
- return arr;
- }
- private String randomString()
- {
- int n=(int)(Math.random()*100+1);
- String AlphaNumericString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" + "0123456789" + "abcdefghijklmnopqrstuvxyz";
- StringBuilder sb = new StringBuilder(n);
- for (int i = 0; i < n; i++) {
- int index = (int)(AlphaNumericString.length() * Math.random());
- sb.append(AlphaNumericString.charAt(index));
- }
- return sb.toString();
- }
- }
- ////////////// Main
- public class Main {
- public static void main(String[] args) {
- Sort sort=new Sort();
- sort.choosingMenu();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement