#include
#include
#include
#define ROW 4
#define COL 5
void addRandNum(int a[][COL], int row, int col)
{
int i, j;
srand((unsigned)time(NULL)); /*随机种子*/
// n=rand()%(Y-X+1)+X; /*n为X~Y之间的随机数*/
for (i =0; i < row; i++)
{
for (j = 0; j < col; j++)
{
a[i][j] = rand()%(100 - 50 + 1) + 50;
}
}
}
/*******************************
***此函数为一趟排序*************
***num 为间隔*******************
***arraylen 为数组长度*********/
void sellsortInsert(int array[][COL], int num, int arraylen)
{
int i, j;
int temp;
int *p = array[0];
for (i = 0; i + num < arraylen; ++i)
{
if (p[i] < p[i + num])
{
temp = p[i];
p[i] = p[i + num];
p[i + num] = temp;
}
}
}
/*******************************
*******希尔排序函数*************
*******************************/
void sellsort(int array[][COL], int* dlta, int t, int arraylen)
{
int k;
int i;
for (k = 0; k < t; ++k)
{
sellsortInsert(array, dlta[k], arraylen);
}
}
int main(int argc, char* argv[])
{
int i, j;
int a[ROW][COL];
addRandNum(a, ROW, COL);
int dlta[5] = {5, 4, 3, 2, 1};
sellsort(a, dlta, 5, ROW*COL);
for (i =0; i < ROW; i++)
{
for (j = 0; j < COL; j++)
{
printf("%d ", a[i][j]);
}
}
return 0;
}
参考:
#include
using namespace std;
int main()
{
int array[3][4]=,,};
int b,temp,i,j=0,k=0,n=0,m=0;
int a[12],flag=0;
cout<<"排序前的数组:"<
{
for(j=0;j<4;j++)
cout<
cout<<"排序后的数组:"<
for(j=0;j<4;j++)
{
a[k]=array[i][j];
k++;
}
for(k=0;k<12;k++)
{
for(i=k+1;i<12;i++)
if(a[k]>a[i])
{
temp=a[k];
a[k]=a[i];
a[i]=temp;
}
}
for(j=0;j<4;j++)
{
switch(flag)//当flag=0时从上到下存回原数组, flag=1 时从下到上存储
{
case 0: for(n=0;n<3;n++)
{
array[n][j]=a[m];
m++;
}
flag=1;break;
case 1: for(n=2;n>=0;n--)
{
array[n][j]=a[m];
m++;
}
flag=0;break;
default:break;
}
}
for(i=0;i<3;i++)//输出排好序的数组
{
for(j=0;j<4;j++)
cout<
system("pause");
}
用c++编的