Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Сортировка массива по параметру числа



Пример 2. Рассортировать одномерный целочисленный массив по возрастанию последней цифры числа. Если последняя цифра одинакова, то сортировать по возрастанию самого числа.

void MyInp(int x[],int size); /* Функция ввода массива размерности size*/

void MyOut(int x[],int size); /* Функция вывода массива размерности size*/

/* Сортировка массива по возрастанию последней цифры числа */

void MySort(int x[],int size);

/* Для одного числа получаем последнюю цифру */

int DIGIT(int num) { return abs(num % 10); }

/* Перестановка двух целых чисел */

void RR(int &u, int &v) { int t=u; u=v; v=t; };

int main() { const n=10; int A[n]; MyInp(A,n);

cout<<" Integer array\n"; MyOut(A,n); MySort(A,n);

cout<<" \n\Array after sorting\n"; MyOut(A,n);

getch(); return 0; };

void MyInp(int x[],int size)

{ for(int i=0; i<size; i++) cin>>x[i]; }

void MyOut(int x[],int size)

{ cout<<endl; for(int i=0; i<size; i++) cout<<x[i]<<" "; };

/* Если надо сортировать числовой массив по некоторому параметру числа, например, как в нашей задаче, по последней цифре числа, то в обычную сортировку необходимо внести следующие дополнения:

1) получаем массив параметров (массив D последних цифр);

2) в алгоритме сортировки сравниваем не числа массива, а эти параметры. И если параметры равны, только тогда сравниваем сами числа;

3) переставляем, если надо, элементы исходного массива и их параметры, чтобы они соответствовали тем же числам, что и до сортировки. */

void MySort(int *x, int size)

{ /* Получаем массив последних цифр*/ int D[20];

/* 20 — наибольшая размерность */

for(int i=0; i<size; i++) D[i]=DIGIT(x[i]);

/* В качестве фактического параметра функции можно использовать индексированную переменную, то есть элемент массива, если параметром такой функции является простая переменная. В качестве формального параметра индексированную переменную записывать нельзя. */

int flag=1, k=size;

while (flag) { k--; flag=0;

for(int j=0; j<k; j++)

/* Сравниваем параметры чисел, а если они равны, то и сами числа */

if (D[j]>D[j+1] || x[j]>x[j+1] && D[j]==D[j+1])

{ RR(D[j], D[j+1]); // переставляем параметры

RR(x[j], x[j+1]); // переставляем исходные числа

flag=1; }

} // the end of while

}; // the end of function MySort





Дата публикования: 2015-02-18; Прочитано: 573 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...