Форум программистов, компьютерный форум CyberForum.ru

Функция сортировки и поиска - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Выйти из goto. http://www.cyberforum.ru/cpp-beginners/thread142299.html
Работаю в С++. Было задание написать программу с использованием goto. Вот код: //--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include <tchar.h> #include<conio.h> #include<iostream.h>
C++ Найти все делители числа P Помогите студентке пожалуйста сделать задачу. Требуется найти все делители числа Р. Задачу я решила, но препод сказал сделать с использованием виртуальных функций для построения абстрактных классов. заранее извиняюсь но почему то не могу выделить код, у меня кнопки в браузере OPERA не активны. int p,i; void main() { clrscr(); cout<<"Vvedite p: "; http://www.cyberforum.ru/cpp-beginners/thread142284.html
C++ лежит ли точка на вершине ромба?
доброго времени суток! помогите пожалуйста разобраться что не так...?? задание:узнать, лежит ли точка на вершине ромба?ромб задаётся по точкам. вот код, который у меня не компилируется...=( #include "stdafx.h" #include <stdio.h> #include <conio.h> #include <math.h> #include <iostream>
C++ Файлы на Си. строки-абзацы.
Недавно начала изучать Си, есть такое задание Составить программу, объединяющую каждый абзац во входном файле в одну строку. Абзацы могут отличаться друг от друга отступом в начале строки или разделяться пустой строкой. В результирующих строках-абзацах не должно быть лишних пробелов между словами. Даже не знаю как к ней подступиться, заранее благодарю за помощь.
C++ по дисциплине: «Структуры и алгоритмы обработки данных» http://www.cyberforum.ru/cpp-beginners/thread142255.html
нужно написать в программе с++: Многочлен a n xn + a n-1 xn-1 + . . . + a 0 можно представить в виде упорядоченного по убыванию степени n двусвязного линейного списка пар (i, a i-1). Ввод полинома рекомендуется сделать в виде: a n x^n + a n-1 x^n-1 + … + a 0 Предусмотреть формирование многочлена из файла, с клавиатуры, а так же добавление нового слагаемого в указанный многочлен....
C++ функция и треугольник Написать функцию triangle с переменным числом параметров, которая определяет сколько троек рядом расположенных чисел типа int могут быть длинами сторон треугольника. подробнее

Показать сообщение отдельно
foruss
1 / 1 / 0
Регистрация: 07.06.2010
Сообщений: 10
09.06.2010, 20:58  [ТС]     Функция сортировки и поиска
Я тут вот помучался...
Кое-что нашел. Может есть знающие люди,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class T>
int gold(T *a, T b, int n, int number_find_element){
  if(!n)
    return -1;
  int m = n - ((pow(5,1/2) + 1) / 2);
  if (a[m] == b)
    return m + number_find_element;
  if (b < a[m])
    return gold(a, b, m, number_find_element);
  else
   return gold(a + m -1, b, n - m - 1, number_find_element + m);
 
}
Вот это поиск золотым сечением? то что выше..
Так...Вот нашел еще код линейного поиска
C++
1
2
3
4
5
6
7
template <class T>
int linfind( T*a, T b,int n){
  for(int i = 0; i < n; i++)
    if(a[i] == b)
      return i;
    return -1;
}
И еще, копался в инете, гуглил, яндексил и везде лазил, так вот нашел Нерекурсивную сортировку слиянием.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
// Слияние двух упорядоченных массивов
// m1 - Первый массив
// m2 - Второй массив
// l1 - Длина первого массива
// l2 - Длина второго массива
// Возвращает объединённый массив
template <class T>
T* merge(T *m1, T* m2, int l1, int l2){
    T* ret = new T[l1+l2];
    int n = 0;
    // Сливаем массивы, пока один не закончится
    while (l1 && l2){
        if (*m1 < *m2){
           ret[n] = *m1;
           m1++; l1--;}
        else {
           ret[n] = *m2;
           m2++; l2--;}
       n++;}
    // Если закончился первый массив
    if (l1 == 0){
        for (int i=0; i<l2; i++){
            ret[n++] = *m2++;}}
    // Если закончился второй массив
    else {
        for (int i=0; i<l1; i++){
           ret[n++] = *m1++;}}
    return ret;}
 
// Функция восходящего слияния
template <class T>
void mergeSort(T * mas, int len){
    int n=1, l, ost;
    T * mas1;
    while (n<len){
        l=0;
        while (l<len){
           if (l+n >= len) break;
           ost = (l+n*2>len) ? (len-(l+n)) : n;
           mas1 = merge(mas+l, mas+l+n, n, ost);
           for (int i=0; i<n+ost; i++) mas[l+i] = mas1[i];
           delete [] mas1;
           l+=n*2;}
       n*=2;
}}
Но есть пару проблем. Я не пойму как она работает, что возвращает и как изменяет Короче бред какой то вообще!
И когда я запускал, она не воспринимала массивы типа инт, постоянно ругалась, может я что то недопонимаю? Буду рад если кто мне объяснит и поможет =)
 
Текущее время: 04:24. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru