Добрый вечер, участники форума!
И это снова я, если вы меня не забыли
На этот раз задача вывести k-ый по возрастанию элемент массива.
Сортировать нельзя, менять массив нельзя, заводить новый - правильно, нельзя. Нужно исхитриться.
Загвоздка в том, что, например,в массиве 1, 2, 1, 3 - второй по возрастанию элемент - 1. Т.е. нужен второй элемент не по значению, а по позиции в отсортированном массиве. (А сортировать нельзя).
Мой код разумеется очень плохой, ну хоть идея какая-то.
Написана функция:
- int k_item(int a[],int k)
- {
- int item=0;
- int j=0;
- int i=0;
- int count=0;
- int min,max,prev_min;
- min=MIN(a);
-
- while(count<k)
- {
- prev_min=min;
-
- while(i<10) //Эта штука на случай повторения элементов
- {
- if(a[i]==min)
- {
- count++;
-
- if(count>=k)
- {
- break;
- }
- }
- i++;
- }
-
- if(count>=k)
- {
- break;
- }
- min=MIN_next(a,prev_min);
- count++;
- }
-
- return min;
- }
И две подфункции MIN - ищет минимум, и MIN_next ищет минимум строго больше некоторого числа.
На счет первой прошу не сомневаться
А вот вторая:
MIN_next:
- int MIN_next(int a[],int E)
- {
-
- int ind=0;
- int min;
-
- while(a[ind]<=E)
- {
- ind++;
- }
-
- min=a[ind];
-
- ind=0;
-
- while(ind<10)
- {
- if((a[ind]<min)&&(a[ind]>E))
- {
- min=a[ind];
- }
-
- ind++;
- }
-
- return min;
- }
В связи с этим всем у меня два вопроса:
1)Как проще-то надо было сделать?
2)Что бы доработать в самой первой функции, а то она ж не работает такая этакая.