Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C] Сортировка элементов массива по убыванию


Автор: feanaro 6.1.2007, 12:51
Задан размер массива действительных чисел и значения его элементов.
Вывести массив, отсортированный по убыванию значений элементов.

(только в С, а не в С++)
 smile 

Автор: Rodman 6.1.2007, 13:11
раз
Код

#include<stdio.h>
#define N 1000
int main() {
   int n, i;
   int a[N];
   scanf("%d", &n);
   for(i = 0 ; i < n; i++) { //Считывание n чисел
       scanf("%d", &a[i]);
   }
   for(i = 0 ; i < n-1 ; i++) { // n раз
      for(j = 0 ; j < n - i -1 ; j++) {  // Сравниваем два соседних элемента.
          if(a[j] > a[j+1]) {            // Если они идут в неправильном порядке, то 
             int tmp = a[j]; a[j] = a[j+1] ; a[j+1] = tmp; //  меняем их местами. 
          }
       }
   }
}

два
Код

#include <stdio.h>
#include <stdlib.h>
#define N 1000
int cmp(const void *a, const void *b) {
    return *(int*)a - *(int*)b;
}
int main() {
   int n, i;
   int a[N];
   scanf("%d", &n);
   for(i = 0 ; i < n; i++) { // ЧИТАЕМ ВХОД
       scanf("%d", &a[i]);
   }
   qsort(a, n, sizeof(int), cmp ); // СОРТИРУЕМ
   for(i = 0 ; i < n; i++) { // ВЫВОДИМ РЕЗУЛЬТАТ
       printf("%d ", a[i]);
   }
   return 0;
}

Автор: Damarus 6.1.2007, 13:16
Цитата(Rodman @  6.1.2007,  13:11 Найти цитируемый пост)
раз

j забыл объявить.

Автор: Xenon 6.1.2007, 14:54
Три
Код

#include <iostream>
#include <conio.h>
using std::cout;
template <class T>
void sort (T* arr,int size)
{
    for (int i=0,j=1;j<size;j++)
    {
        int temp=arr[j];
        for (i=j-1;i>=0 && arr[i]<temp;i--)
        {
            arr[i+1]=arr[i];
        }
        arr[i+1]=temp;
    }
    display<T>(arr,size);
}
template <class T>
void display (T* arr,int size)
{
    for(int i=0;i<size;i++)
    {
        cout << arr[i] << " ";
    }
}

int main(int argc, char* argv[])
{
    int  arr[]   = {3, 6, 3, 4, 7, 6};
    sort<int>(arr,sizeof(arr)/sizeof(int));
    _getch();
    return 0;
}


упс, тут C  smile 

Автор: feanaro 6.1.2007, 15:46
Rodman
Спасибо огромное. Вроде работает. 
Единственное, прошу пояснить один момент (выделил красным, собственно почему именно n-i-1?) 
Цитата

   for(i = 0 ; i < n-1 ; i++) { 
      for(j = 0 ; j < n - i -1; j++){ 

Автор: Rodman 6.1.2007, 15:53
Xenon, 
Цитата(feanaro @  6.1.2007,  11:51 Найти цитируемый пост)
(только в С, а не в С++)


Цитата(feanaro @  6.1.2007,  14:46 Найти цитируемый пост)
почему именно n-i-1?

прочто чтобы не сравнивать один и тот же элемент...

Удачи на здаче...

Автор: Xenon 6.1.2007, 15:57
Rodman, я и написал "УПС" smile

Автор: feanaro 6.1.2007, 15:57
Rodman, благодарствую)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)