时间:2021-05-19
在看jpeg解码,里面有对8x8数组进行重排。里面直接提供了unzig表:
int unzig[] = {
0, 1, 8, 16, 9, 2, 3, 10,
17, 24, 32, 25, 18, 11, 4, 5,
12, 19, 26, 33, 40, 48, 41, 34,
27, 20, 13, 6, 7, 14, 21, 28,
35, 42, 49, 56, 57, 50, 43, 36,
29, 22, 15, 23, 30, 37, 44, 51,
58, 59, 52, 45, 38, 31, 39, 46,
53, 60, 61, 54, 47, 55, 62, 63,
};
然后自己写了个产生unzig表的程序。
:-)
代码如下:
复制代码 代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef void (*fn)(int, int, int, int, void*);
printpos(int x, int y, int n, int i, void *arr)
{
// printf("%2d%c", x+y*n, i%n==(n-1)?'\n':' ');
int *a;
a = (int*)arr;
printf("%2d%c", a[i], i%n==(n-1)?'\n':' ');
}
unzigasgn(int x, int y, int n, int i, void *arr)
{
int *a;
a = (int*)arr;
a[i] = x+y*n;
}
zigasgn(int x, int y, int n, int i, void *arr)
{
int *a;
a = (int*)arr;
a[x+y*n] = i;
}
zigzag(int n, fn f1, void *arr)
{
int i, x, y;
i = 0;
x = y = 0;
f1(x, y, n, i, arr);
for(;;) {
if(++i >= n*n)
return;
if(x+1 < n){
x++;
f1(x, y, n, i, arr);
}else{
y++;
f1(x, y, n, i, arr);
}
while(x-1 >= 0 && y+1 < n){
x--;
y++;
if(++i >= n*n)
return;
f1(x, y, n, i, arr);
}
if(++i >= n*n)
return;
if(y+1 < n){
y++;
f1(x, y, n, i, arr);
}else{
x++;
f1(x, y, n, i, arr);
}
while(x+1 < n && y-1 >= 0){
x++;
y--;
if(++i >= n*n)
return;
f1(x, y, n, i, arr);
}
}
}
testzigzag(int n)
{
int i;
int n2;
int *arr;
n2 = n*n;
arr = malloc(n*n*sizeof(*arr));
zigzag(n, (fn)zigasgn, arr);
zigzag(n, (fn)printpos, arr);
printf("\n\n");
zigzag(n, (fn)unzigasgn, arr);
zigzag(n, (fn)printpos, arr);
}
main(int argc, char **argv)
{
int n;
n = 8;
if(argc > 1){
n = atoi(argv[1]);
}
testzigzag(n);
return 0;
}
运行结果截图:
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了PHP使用array_merge重新排列数组下标的方法。分享给大家供大家参考。具体如下:用了一个array_unique去除了一个数组里面的重复,
重新排列App于是在第4个iOS13开发者测试版中,苹果在contextmenus中新增了一个「重新排列App」的选项。这样一来,你就可以忘记长按App图标不松
shuffle()定义和用法shuffle()函数把数组中的元素按随机顺序重新排列。若成功,则返回TRUE,否则返回FALSE。注释:本函数为数组中的单元赋予新
把一个字符串中的字符重新排列生成新的字符串,返回新生成的字符串里没有连续重复字符的字符串个数.连续重复只以单个字符为准例如,aab应该返回2因为它总共有6中排列
这个排序是进行两两比较。拿这个数组进行降序排列vara=[3,1,5,6,4,2];第一轮比较:用第一个数值和本数组的其他元素进行比对3比13比5//5大,所以