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

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

Я пишу несколько сортировок, но сортировка простыми вставками отказывается сортировать элементы по убыванию. Как правильно сортировать по убыванию? Переменная col считает кол-во сравнений. Код здесь и ниже http://pastebin.com/Bvv4tXng

int StraightInsertionSort( int *m, int n )
{
int i, j, temp, col1=0;
for (i = 1; i < n; i++)
{
temp = m[i];
col1+=1;
for (j = i - 1; j >= 0; j--)
{

if (m[j] < temp)
break;

m[j + 1] = m[j];
col1+=1;
}
m[j] = temp;
col1+=1;
}
return col1;
}
void insertion_sort_increase(int* _vector, const size_t _size) {
insertion_sort_decrease(_vector, _size);
reverse(_vector, _size);
}
void insertion_sort_decrease(int* _vector, const size_t _size) {
int temp;
rsize_t m;
for (rsize_t n = 1; n < _size; n++) {
temp = _vector[n];
m = n - 1;
while (m >= 0 && _vector[m] > temp) {
_vector[m + 1] = _vector[m];
--m;
}
_vector[m + 1] = temp;
}
}
void reverse(int* _vector, size_t _size) {
size_t i = 0, j = _size - 1;
while (i < j) {
swap(_vector[i], _vector[j]);
++i;
--j;
}
}
void swap(int* _a, int* _b) {
int c = *_a;
*_a = *_b;
*_b = c;
}
НГ
Наиль Гайнулин
71 000
Лучший ответ
#include <stdio.h>

void re_isort(int* first, int* last){
int* ptr, *iter, *p, tmp;

for(iter = first; iter != last; ++iter) {
tmp = *iter;
for(ptr = first; (ptr != iter) && (*ptr > tmp); ++ptr);

for(p = iter - 1; p >= ptr; --p)
*(p + 1) = *p;

*ptr = tmp;
}
}

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

re_isort(arr, arr + num);

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

Тест кода: http://ideone.com/xhuC8Y