Другие языки программирования и технологии

Сортировки, язык Си.

Я реализовал четыре сортировки, вывел их результат в виде таблицы, в двух из них все равно получаю неверный результат. Сортирую четыре массива заполненных по возрастанию/убыванию/случайными числами.
Хочу узнать ваше мнения, правильно ли я сортирую и запоминаю кол-во перестановок (сравнений) .

Обе сортировки скину и сюда http://pastebin.com/x5B2RYtG

Пузырьковая сортировка с ограниченным числом проходов

int BubbleSort (int *a, int n)

{

int i, j, x, flag=1, col3=0;

for (i=1; flag; i++)

{

flag = 0;//признак упорядоченной последовательности

for (j=n-1; j>=i; j--)

if (a[j]>a[j-1])

{

col3+=3;

x = a[j-1];

a[j-1] = a[j];

a[j] = x;

flag = 1; //была перестановка, значит, еще не все

}

}

return col3;

}

Сортировка простыми вставками

int StraightInsertionSort( int *m, int n )

{

int i, j, temp, col1=0;

for (i = 1; i < n; i++)

{

temp = m[i];

for (j = i - 1; j >= 0; j--)

{

if (m[j] < temp)

break;

m[j + 1] = m[j];

m[j] = temp;

col1+=1;

}

}

return col1;

}
Вот вам улучшенный вариант сортировки Пузырьком!

void comb_sort(double* _array, const size_t _size) {
if (_array && _size) {
size_t jump = _size;
bool swapped = true;
while (jump > 1 || swapped) {
if (jump > 1) jump = size_t(jump / 1.25);
swapped = false;
for (size_t n = 0; n + jump < _size; n++) {
if (_array[n] > _array[n + jump]) {
swap(_array[n], _array[n + jump]);
swapped = true;
}
}
}
}
}
NR
Nizomsher Raximov
88 083
Лучший ответ
Вот накидал "Пирамидальную сортировку".

#include <stdio.h>
#include <stdlib.h>

// функция восстановления свойства бинарной кучи
void __heapify(int* arr, int i, int cnt) {
int t, l, r, large;

while(1){
l = i*2 + 1;
r = i*2 + 2;
if((l < cnt) && (arr[l] > arr[i]))
large = l;
else
large = i;

if((r < cnt) && (arr[r] > arr[large]))
large = r;

if(large != i){
t = arr[i];
arr[i] = arr[large];
arr[large] = t;

i = large;
} else
break;
}
}

// Пирамидальная сортировка
void heap_sort(int* arr, int cnt){
int t, i;
// в начале из массива делаем make-heap
for(i = cnt/2-1; i >= 0; --i)
__heapify(arr, i, cnt);

//pop_min
for(i = cnt - 1; i >= 0; --i) {
t = arr[0];
arr[0] = arr[i];
arr[i] = t;
__heapify(arr, 0, i);
}
}

int main(void){
int i;
int arr[] = { 100, 9, 5, 8, 1, 2, 6, 7, 4, 3, -100 };
int cnt = sizeof(arr)/sizeof(arr[0]);

heap_sort(arr, cnt);

for(i = 0; i < cnt; ++i)
printf("%d ", arr[i]);
return 0;
}

Проверка работы кода: http://ideone.com/8tMxih
MA
Murod Abdullayev
11 372
Всё фигня.. вот - главная программа
#include <iostream>
#include <conio.h>
#include "Sort.h" // - заголовочный файл созданного класса
using namespace std;

int main()
{
setlocale(LC_ALL, "Russian");
system("color 0F");

Sort a;
Sort b(a);
Sort c(a);
Sort d(a);
Sort e(a);
Sort f(a);
Sort g(a);

int sravnen = 0;
int perenos = 0;

cout << endl << "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" << endl;
cout << " Сортировка выбором " << endl << endl;
a.selectionsort(perenos, sravnen);
a.show_array(perenos, sravnen);

cout << endl << "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" << endl;
cout << " Сортировка вставками " << endl << endl;
b.insertionsort(perenos, sravnen);
b.show_array(perenos, sravnen);

cout << endl << "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" << endl;
cout << " Прямое включение " << endl << endl;
c.SortNoBarrier(perenos, sravnen);
c.show_array(perenos, sravnen);

cout << endl << "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" << endl;
cout << " Прямой обмен (сортировка пузырьком) " << endl << endl;
d.DirectExchange(perenos, sravnen);
d.show_array(perenos, sravnen);

cout << endl << "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" << endl;
cout << " Прямой выбор" << endl << endl;
e.DirectSelection(perenos, sravnen);
e.show_array(perenos, sravnen);

cout << endl << "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" << endl;
cout << " Шейкерная сортировка " << endl << endl;
f.ShakerSort(perenos, sravnen);
f.show_array(perenos, sravnen);

int left = 0;
int right = e.get_size() - 1;
sravnen = 0;
perenos = 0;

cout << endl << "=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-" << endl;
cout << " Быстрая сортировка " << endl << endl;
g.sort_quick(left, right, sravnen, perenos);
g.show_array(perenos, sravnen);

_getch();
return 0;
}