![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
Пример 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!