сортировать первые n элементов массива

#c #arrays #sorting

#c #массивы #сортировка

Вопрос:

Я знаю, как сортировать массив по возрастанию, но не совсем понимаю, когда просто сортирую первые n (в моем случае 4) элементов. Я попытался добавить значение count и выполнить цикл do-while, но он все равно сортирует весь элемент. Есть идеи?

     do{

        for(i=0; i<size; i  ){
            for(j=i 1; j<size; j  ){
                if(arr[j] < arr[i]){
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                    count  ;
                }
            }
        }
      }while(count<5)
  

Комментарии:

1. В чем проблема? Просто установите size то, что вы хотите

Ответ №1:

Я знаю, как сортировать массив по возрастанию, но не совсем улавливаю его, когда просто сортирую первые n элементы

Это не сильно отличается.

Вместо того, чтобы использовать for цикл для сортировки элементов всего массива, используйте его только для первых n элементов, изменив значение size на значение n

 int n;           //variable to store the value of 'n'
scanf("%d", amp;n); //scan value of 'n'

size = n;        //assigning value of 'n' to 'size'

for(i=0; i < size; i  )
{
    for(j = i 1; j < size; j  )
    {
        if(arr[j] < arr[i])
        {
            temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
    }
}
  

или по

используя n вместо size , если вам требуется значение size позже в программе.

     int n;           //variable to store the value of 'n'
    scanf("%d", amp;n); //scan value of 'n'

    for(i=0; i < n; i  )
    {
        for(j = i 1; j < n; j  )
        {
            if(arr[j] < arr[i])
            {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
    }
  

Комментарии:

1. вы также должны проверить наличие n<=size

2. @rootTraveller да … были бы и другие подобные вещи, например n > 0 , n <= size , я уверен, что OP сам позаботится об этих проблемах. Я просто показываю ему способ преодолеть его проблему, но никоим образом не предоставляю полное решение 🙂

3. Большое спасибо. Я использовал n внутри for цикла, потому что мне нужен фиксированный размер массива. И могу ли я предложить, если учитель попросит отсортировать только последнее n число?

4. Да … это просто. Просто введите значение n и запустите цикл из i = size - n цикла continue до i < size

Ответ №2:

Ваш do цикл не имеет очевидной функции. Единственное, что вам нужно сделать, это установить size значение, отличное (меньшее или равное) от размера массива

Ответ №3:

Для этого вам не нужен do-while цикл. Просто обновите значение size by n .

 size = 4; //assign the value till you want to sort
for(i=0; i<size; i  ){
    for(j=i 1; j<size; j  ){
         if(arr[j] < arr[i]){
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
         }
     }
}
  

Ответ №4:

Вам не нужно использовать do-while цикл и заменять size на 4 (как вы сказали, что хотите отсортировать 4 элемента).

Ответ №5:

В вашем случае управление перейдет в состояние while после сортировки всех элементов.поэтому нет необходимости добавлять do-while.Задайте только нужный размер. int i,j,n=4,k,temp; int arr[]={3,5,1,7,9,1,2};

     for(i=0; i<n; i  ){
        for(j=i 1; j<n; j  ){
            if(arr[j] < arr[i]){
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;

            }
        }
   }
  

Ответ №6:

Ваш массив завершается сортировкой в do{}, прежде чем перейти к вашему состоянию while(count<5). пожалуйста, проверьте это- Scanner sc =новый сканер (System.in ); System.out.println(«Введите первые n чисел для сортировки»); int firstN=sc.nextInt();

     int arr[]={2,3,8,1,0,5,4};

    if(firstN<=arr.length)
    {
        for(int i=0; i<firstN; i  ){
            for(int j=i 1; j<firstN; j  ){
                if(arr[j] < arr[i]){
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;

                }
            }
        }
    }