Помогите переделать сортировку, нужна сортировка методом Шелла
#include <iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main ()
{const int n=3;const int m=3;
int a[n][m];
srand(time(NULL));
int i,j;
for (i=0;i<n;i++)
{for(j=0;j<m;j++)
a[j]=rand()%10;}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cout « a[j]« "t";
}
cout « "nnnn";
}
for(int c=0;c<=(n*m);c++)//колличество проходов
{
//в строках упорядочиваем
for(i=0;i<n;i++)
{
for(j=0;j<m-1;j++)
{
if(a[j]>a[j+1])
{
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}}
//вывод на экран после сортировки
cout« "Posle sortirovki""nnnn";
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
cout « a[j] « "t";
}
cout « "nnnn";
}
system("pause");
return 0;}
http://completepascal.blogspot.ru/2010/09/blog-post_999.html
да тут надо изменить всего несколько строк с сортировке, но я не знаю какие((((
загугли в гугл
да я знаю как выглядит этот метод, но не могу изменить, иначе бы я не скидывала сюда.
Код:
#include <iostream>
#include <stdlib.h>
using std::cout;
void shell_sort(int* arr, int size, bool (*cmp)(int, int)) {
int j, num;
for(int m = size >> 1; m > 0; m >>= 1) {
for(int k = 0; k < m; k++) {
for(int i = m + k; i < size; i += m) {
num = *((arr) + i);
j = k;
while((j < i) && (cmp(arr[j], num)))
j += m;
for(int p = i - m; p >= j; p -= m)
*((arr) + p + m) = *((arr) + p);
*((arr) + j) = num;
}
}
}
}
// компаратор для сортировки по возрастанию
bool cmp_asc(int a, int b) { return (a < b); }
// компаратор для сортировки по убыванию
bool cmp_desc(int a, int b) { return (a > b); }
int main(void){
int arr[24];
int size = sizeof(arr)/sizeof(arr[0]);
for(int i = 0; i < size; arr[i++] = rand() % 100);
// сортируем по возрастанию
shell_sort(arr, size, cmp_asc);
for(int i = 0; i < size; i++)
cout << arr[i] << ' ';
cout.put('n');
for(int j = 0; j < size; arr[j++] = rand() % 100);
// сортируем по убыванию
shell_sort(arr, size, cmp_desc);
for(int i = 0; i < size; i++)
cout << arr[i] << ' ';
cout.put('n');
return 0;
}
#include <stdlib.h>
using std::cout;
void shell_sort(int* arr, int size, bool (*cmp)(int, int)) {
int j, num;
for(int m = size >> 1; m > 0; m >>= 1) {
for(int k = 0; k < m; k++) {
for(int i = m + k; i < size; i += m) {
num = *((arr) + i);
j = k;
while((j < i) && (cmp(arr[j], num)))
j += m;
for(int p = i - m; p >= j; p -= m)
*((arr) + p + m) = *((arr) + p);
*((arr) + j) = num;
}
}
}
}
// компаратор для сортировки по возрастанию
bool cmp_asc(int a, int b) { return (a < b); }
// компаратор для сортировки по убыванию
bool cmp_desc(int a, int b) { return (a > b); }
int main(void){
int arr[24];
int size = sizeof(arr)/sizeof(arr[0]);
for(int i = 0; i < size; arr[i++] = rand() % 100);
// сортируем по возрастанию
shell_sort(arr, size, cmp_asc);
for(int i = 0; i < size; i++)
cout << arr[i] << ' ';
cout.put('n');
for(int j = 0; j < size; arr[j++] = rand() % 100);
// сортируем по убыванию
shell_sort(arr, size, cmp_desc);
for(int i = 0; i < size; i++)
cout << arr[i] << ' ';
cout.put('n');
return 0;
}