Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/56: Рейтинг темы: голосов - 56, средняя оценка - 4.93
1 / 1 / 0
Регистрация: 11.05.2015
Сообщений: 42

Сортировка выбором

21.10.2015, 02:47. Показов 11031. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть алгоритм сортировки выбором. Если я в коде задаю значения элементов массива, то все работает хорошо.
Помогите сделать рабочую сортировку, когда элементы массива принимают рандомные значения
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public static void main(String[] args) {
        // write your code here
        //int[] a = new int[]{40,34,21,54,65,78,12,9,1,2,36,76,100,15,235,33,23,20};
        int[] a = new int[15];
 
        for (int i = 0; i < a.length; i++) {
 
            // предпологаем, что начальный элемент рассматриваемого фрагмента и будет минимальным
 
            int min = a[i]; // предполагаемый минимальный элемент
            int imin = i;   // индекс минимального жлемента
 
            // Просматриваем оставшийся фрагмент массива и ищем там элемент, меньший предположенного минимума.
 
            for (int j = i + 1; j < a.length; j++) {
                //Если находим новый минимум, то запоминаем его индекс
                //И обновляем значение минимума
                if (a[j] < min) {
                    min = a[j];
                    imin = j;
                }
            }
 
            //Проверяем, нашелся ли элемент меньше, чем стоит на текущей позиции.
            // Если нашелся, то меняем элементы местами
 
            if (i != imin) {
                int temp = a[i];
                a[i] = a[imin];
                a[imin] = temp;
            }
            System.out.print(a[i] + " ");
        }
    }
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.10.2015, 02:47
Ответы с готовыми решениями:

Сортировка выбором, сортировка вставкой, сортировка заменой, сортировка обменом ("пузырьковая" сортировка)
Создать класс, содержащий массив и реализующий алгоритмы сортировки и бинарного поиска в этом массиве. Класс описать с помощью...

Сортировка массивов. Сортировка выбором
Помогите пожалуйста, я что-то совсем запуталась при составлении данной программы... Сортировка выбором. Дана последовательность чисел...

Сортировка выбором
Помогите,пожалуйста.Очень нужно,сроки &quot;горят&quot;( 1.Рассмотрим массив целых или действительных чисел a1...an Пусть требуется переставить...

11
алкокодер
 Аватар для UnsKneD
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
21.10.2015, 03:59
У вас даже массив не заполнен.
0
1 / 1 / 0
Регистрация: 11.05.2015
Сообщений: 42
21.10.2015, 04:07  [ТС]
Стер, так как не могу заполнить так, что бы работало
0
алкокодер
 Аватар для UnsKneD
157 / 153 / 41
Регистрация: 27.12.2012
Сообщений: 550
21.10.2015, 04:28
Java
1
2
3
4
5
6
7
8
9
        int[] a = new int[15];
        Random r = new Random();
        for(int i = 0; i<a.length; i++){
            a[i] = r.nextInt(100);
        }
 
        for(int i = 0; i<a.length; i++){
            System.out.print(a[i] + " ");
        }
0
5 / 5 / 2
Регистрация: 12.02.2016
Сообщений: 11
12.02.2016, 16:09
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
public static void main(String args[]){     
    int[] a = new int[(int)(Math.random()*10+1)]; //задаем массив случайного размера от 1 до 10
    
    for (int i=0; i<a.length; i++){
        a[i]=(int)(Math.random()*10+1); //заполняем элементы массива случайными целыми числами от 1 до 10
        System.out.print(a[i]+" "); //выводим массив, чтобы знать что там 
    }
    System.out.println(); //для отображения отсортированного ниже массива уже с новой строки
 
 
        //далее идет ваш текст без изменений
 
    for (int i = 0; i < a.length; i++) {
     
        // предпологаем, что начальный элемент рассматриваемого фрагмента и будет минимальным
 
        int min = a[i]; // предполагаемый минимальный элемент
        int imin = i;   // индекс минимального жлемента
 
        // Просматриваем оставшийся фрагмент массива и ищем там элемент, меньший предположенного минимума.
        for (int j = i + 1; j < a.length; j++) {
 
            //Если находим новый минимум, то запоминаем его индекс
            //И обновляем значение минимума
            if (a[j] < min) {
            min = a[j];
            imin = j;
            }
        }
 
        //Проверяем, нашелся ли элемент меньше, чем стоит на текущей позиции.
        // Если нашелся, то меняем элементы местами
 
        if (i != imin) {
        int temp = a[i];
        a[i] = a[imin];
        a[imin] = temp;
        }
 
        System.out.print(a[i] + " ");
    }
 
}
0
0 / 0 / 0
Регистрация: 12.02.2019
Сообщений: 19
29.03.2019, 10:52
А обязательно нужна проверка if (i != imin)?. Без неё код тоже хорошо работает. Почему так происходит? я пока не понимаю.
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
29.03.2019, 18:11
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import java.util.Arrays;
import java.util.Random;
 
public class SelectionSort {
    private static final int SIZE = 30;
    private static final int MIN = 10;
    private static final int MAX = 99;
 
    public static void main(String[] args) {
        int[] array = createArray(SIZE, MIN, MAX);
        System.out.println("Array before: " + Arrays.toString(array));
        array = sortSelection(array);
        System.out.println("Array after: " + Arrays.toString(array));
    }
 
    private static int[] createArray(int size, int min, int max) {
        return new Random().ints(size, min, max + 1).toArray();
    }
 
    private static int[] sortSelection(int[] array) {
        if (array != null && array.length > 1) {
            int swapIndex;
            int temp;
            for (int index = 0; index < array.length; index++) {
                int min = array[index];
                swapIndex = index;
                for (int sub = index + 1; sub < array.length; sub++) {
                    if (min > array[sub]) {
                        min = array[sub];
                        swapIndex = sub;
                    }
                }
                if (swapIndex != index) {
                    temp = array[index];
                    array[index] = array[swapIndex];
                    array[swapIndex] = temp;
                }
            }
        }
        return array;
    }
}
Добавлено через 2 минуты
Михаил Крук, не обязательно, но просто зачем нам переприсваивать данные, если минимальное число там же расположено, откуда и начали поиск?!
Просто тогда идём дальше и всё...

Если этого не сделать, то тогда просто если минимальное число было в начале в самом, то мы бы взяли это число записали в темп, потом туда записали тоже самое и потом опять присвоили туда же темп... Лишняя работа
0
 Аватар для vvm28
771 / 539 / 67
Регистрация: 22.12.2013
Сообщений: 2,498
Записей в блоге: 26
29.03.2019, 21:34
Вот когда-то писал для тестов на Сodeabbey:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// метод сортировки выбором
public static void sort(int[] nums) {
 
        for (int currentPlace = (nums.length - 1); currentPlace > 0; currentPlace--) {
 
            int bigest = nums[currentPlace];
            int bigestAt = currentPlace;
            for (int check = 0; check < currentPlace; check++) {
                if (bigest < nums[check]) {
                    bigestAt = check;
                    bigest = nums[check];
                }
            }
            int temp = nums[currentPlace];
            nums[currentPlace] = nums[bigestAt];
           // listIndex.add(bigestAt); - это не нужно я индексы максимумов считал при каждом проходе
            nums[bigestAt] = temp;
        }
    }
//-----------в методе main() вызываем:
tosortAr = new int[numTr]; // массив для сортировки
... // заполняем массив tosortAr рандомными целыми
sort(tosortAr); // сортируем выбором

Добавлено через 1 минуту


Добавлено через 42 минуты
Полностью сортировка:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
/*
 * Сортировка выбором
 */
package MyTests;
 
/**
 *
 * @author vvm
 */
public class SelectionSortTest {
 
    public static void main(String[] args) {
        int numTr = 10;// размер массива
        int tosortAr[] = new int[numTr]; // массив для сортировки
 
        for (int i = 0; i < tosortAr.length; i++) {
            tosortAr[i] = rnd(5, 10); // заполнить значениями от 5-ти до 10
        }
 
        sort(tosortAr);//сортируем
 
        for (int i = 0; i < tosortAr.length; i++) {
            System.out.print(" " + tosortAr[i]);
        }
 
    }
 
    public static void sort(int[] nums) {
 
        for (int currentPlace = (nums.length - 1); currentPlace > 0; currentPlace--) {
 
            int bigest = nums[currentPlace];
            int bigestAt = currentPlace;
            for (int check = 0; check < currentPlace; check++) {
                if (bigest < nums[check]) {
                    bigestAt = check;
                    bigest = nums[check];
                }
            }
            int temp = nums[currentPlace];
            nums[currentPlace] = nums[bigestAt];
            // listIndex.add(bigestAt); - это не нужно я индексы максимумов считал при каждом проходе
            nums[bigestAt] = temp;
        }
    }
 
    /**
     * Метод получения псевдослучайного целого числа от min до max (включая
     * max);
     */
    public static int rnd(int min, int max) {
        max -= min;
        return (int) (Math.random() * ++max) + min;
    }
 
}
 
//run:
 //5 5 5 6 8 8 8 10 10 10BUILD SUCCESSFUL (total time: 1 second)
Добавлено через 12 минут
Генерация целого от минимума до максимума:
Java
1
2
3
            Random rand = new Random(); // java.util.Random
            int min =-3, max =10;
            int  x  =  min + rand.nextInt(max - min + 1);
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
29.03.2019, 21:36
или
Java
1
(int) (Math.random() * (max - min + 1) + min);
0
Эксперт PythonЭксперт Java
19530 / 11067 / 2931
Регистрация: 21.10.2017
Сообщений: 23,294
29.03.2019, 21:40
Java
1
int x = ThreadLocalRandom.current().nextInt(min, max);
0
 Аватар для ArtemFM
746 / 493 / 285
Регистрация: 10.09.2015
Сообщений: 1,530
29.03.2019, 21:45
можно поизвращаться конечно
Java
1
int x = new Random().ints(1, min, max + 1).sum();
)))
0
0 / 0 / 0
Регистрация: 24.09.2019
Сообщений: 1
27.04.2020, 14:29
немного не по теме, но кому интересно, это сортировка выбором при самостоятельном заполнении массива.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package Alghoritm.selection_sort;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
class selectionSort {
    public static void selectionSort(int[] array) {
        for (int i = 0; i < array.length; i++) { // i = 0,1,2    , array.length = 3
            int min = array[i]; // min = 5,5,5    , array[i] = 5,5,5
            int minId = i; // minId = 0,1,2   , i = 0,1,2
            for (int j = i + 1; j < array.length; j++) { // j = 1,2,2,   , array.length = 3
                if (array[j] < min) { // array[j] = 3,4,4    , min = 5,3,5
                    min = array[j]; // min = 3,4     , array[j] = 3,4
                    minId = j; // minId = 1,2    , j = 1,2
                }
            }
            int temp = array[i]; // int temp = 5,5,5    , array[i] = 5,5,5                       было array{ 5, 3, 4 }
            array[i] = min; // array[i] = 3,4,5    , min = 3,4,5                                      array{ 3, 3, 4 } array{ 3, 4, 4 } { 3, 4, 5 }
            array[minId] = temp; // minId = 1,2,2       array[minId] 5,5,5    , temp = 5,5,5            array{ 3, 5, 4 } array{ 3, 4, 5 } { 3, 4, 5 }
        }
        System.out.print("Отсортированный массив (сортировка выбором) = { ");
        for (int i = 0; i < array.length; i++) {
            if (array.length - 1 == i) {
                System.out.println(array[i] + " }");
                break;
            }
            System.out.print(array[i] + ", ");
        }
    }
 
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        System.out.println("Введите размер массива: ");
        int size = Integer.parseInt(reader.readLine());
        int array[] = new int[size];
        for (int i = 0; i < size; i++) {
            System.out.println("Введите " + (i + 1) + " число массива: ");
            array[i] = Integer.parseInt(reader.readLine());
        }
        System.out.print("Ваш массив имеет вид = { ");
        for (int i = 0; i < array.length; i++) {
            if (array.length - 1 == i) {
                System.out.println(array[i] + " }");
                break;
            }
            System.out.print(array[i] + ", ");
        }
        selectionSort(array);
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.04.2020, 14:29
Помогаю со студенческими работами здесь

Сортировка выбором
Выбираeтся минимaльный элeмeнт в мaссивe и пeрeнoсится в нoвый массив. 3aтем нa его местo записывается последний элемент исходного массива.

Сортировка выбором
Разбираю сортировку выбором. Как реализовать сортировку по возрастанию понял, а как реализовать сортировку по возрастанию до первого...

Сортировка выбором
Привет. Готовлюсь к собеседованиям и решил подтянуть все сортировки. Помню весной решал такую задачу на сортировку выбором: -Сортировка...

Сортировка выбором
Организуйте массив, состоящий из 10 различных символов. Первую половину массива отсортировать по росту, а вторую по убыванию.

Сортировка выбором
Помогите пожалуйста, в задаче надо вывести минимальное число из данных четырёх. Как сделать так, чтобы не выдавалась комбинация чисел,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru