Я пишу несколько сортировок, но сортировка простыми вставками отказывается сортировать элементы по убыванию. Как правильно сортировать по убыванию? Переменная 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;
}
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;
}
#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
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
Похожие вопросы
- Сортировка простыми вставками.
- Сортировки, язык Си.
- Язык СИ. Массивы Ребят, как на Си написать сортировку массива от меньшего к большему?
- Помогите с массивом и сортировкой методом пузырька в языке Си! Прогу надо сдать в пятницу срочно, не знаю как начать!
- Сортировка Структур по Алфавиту (Язык Си)
- Язык Си. Помогите пожалуйста написать простую программу.
- Почему язык СИ такой сложный?
- Программирование на языке СИ с использованием подпрограммы-функции
- Программирование на языке Си. Нужна небольшая помощь.
- какую программу лучше использовать для программирования на языке Си?