Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Сортировки. Help! (https://forum.antichat.xyz/showthread.php?t=28655)

nc.STRIEM 07.12.2006 14:58

Сортировки. Help!
 
Нужны 2 функции сортировки, написанные на С++ по следующим алгоритмам:

- Обменная сортировка с разделением
- Сортировка слиянием

Может у кого завалялись где, буду очень благодарен!
Нужно очень срочно (конкретно сегодня), самому писать прост нет времени.

TaNkist 07.12.2006 15:44

Сортировка с разделением
Код:

#include "iostream.h"
#include "stdio.h"

void quickSort( int *array, int L, int R ){
int i, j;
int item, temp;
        i = L;
        j = R;
        item = array[(L + R)/2];
        while ( i <= j ){
                while ( array[i] < item ) i++;
                while ( item < array[j] ) j--;
                if ( i <= j ){
                        temp = array[i];
                        array[i] = array[j];
                        array[j] = temp;
                        i++;
                        j--;
                }
        }
        if ( L < j ) quickSort( array, L, j );
        if ( i < R ) quickSort( array, i, R );
}

void main(){
        int i, size;
        int *array;
    cout << "Quick Sort.\nEnter array dimension: ";
    cin >> size;
        array = new int[size];
    cout << "Enter " << size << " elements: ";
        for ( i = 0; i < size; i ++ ){
                cin >> array[i];
        }

        quickSort( array, 0, size - 1 );

        cout << "Your array after sorting: ";
        for ( i = 0; i < size; i ++ ){
                cout << array[i] << " ";
        }
    cout << "\nPress \"Enter\" to continue..." << endl;
    getchar();
}

Сортировка слиянием
Код:

template<class T>
void merge(T a[], long lb, long split, long ub) {
// Слияние упорядоченных частей массива в буфер temp
// с дальнейшим переносом содержимого temp в a[lb]...a[ub]

  // текущая позиция чтения из первой последовательности a[lb]...a[split]
  long pos1=lb;

  // текущая позиция чтения из второй последовательности a[split+1]...a[ub]
  long pos2=split+1;

  // текущая позиция записи в temp
  long pos3=0; 

  T *temp = new T[ub-lb+1];

  // идет слияние, пока есть хоть один элемент в каждой последовательности
  while (pos1 <= split && pos2 <= ub) {
    if (a[pos1] < a[pos2])
      temp[pos3++] = a[pos1++];
    else
      temp[pos3++] = a[pos2++];
  }

  // одна последовательность закончилась -
  // копировать остаток другой в конец буфера
  while (pos2 <= ub)  // пока вторая последовательность непуста
    temp[pos3++] = a[pos2++];
  while (pos1 <= split)  // пока первая последовательность непуста
    temp[pos3++] = a[pos1++];

  // скопировать буфер temp в a[lb]...a[ub]
  for (pos3 = 0; pos3 < ub-lb+1; pos3++)
    a[lb+pos3] = temp[pos3];

  delete temp[ub-lb+1];
}

Не уверен, что это точно такие сортировки, какие тебе нужны. Посмотри еще http://algolist.manual.ru/sort/

Dronga 07.12.2006 15:54

Найди на последнем DVD-хакера, который 9Гб, там все алгоритмы сортировок на С и на Pascal. У кого есть, выложите где-нить, многим пригодится, линк сюда.


Время: 07:35