您的位置:首页 > 其它

指针初步学习,运用指针进行冒泡排序,选择排序,插入排序和折半查找

2014-07-17 22:49 323 查看
在以前存储数据都是运用磁盘的,磁盘的存储是顺序存储,中间不连续的剩余空间,是存储不了大于他们内存空间的东西,会降低磁盘的存储效率,所以需要整理,删除等维护处理。

指针变量是存储地址变量,存地址而已,比如电影票上就是存的地址,通过电影票上的地址找到自己的位置,然后坐在那就相当于将自己存到里面,指针就是通过中间者找到位置,不需要知道找的内容是什么。

内存地址的大小于操作系统的位数有关。

int a = 100; //a是4个字节

int *p = &a; //* 和 int 在一起是指定义整型的指针变量;(变量名)p保存的是a的地址;p是8个字节;

*p = 213;
//相当于 a = 213, 间接访问;

printf(“%d\n”, a);

int *p = null; //指向0的地址,存着8个字节的0, null可以写0, 但是写null 语义更加明确!

//地址的输出是以16进制方式输出的

//指针 间接寻找的内容的大小, 算数运算跳转的空间数量,int 类型跳4个字节

int a = 3;

int *p = &a;

printf("&a = %p\n", &a);

printf("p = %p\n", p);

既然初步认识了指针,那么我们就可以写指针形式的冒泡排序, 选择排序, 插入排序 和 折半查找;

//冒泡排序

int a[] = {2, 4, 5, 8, 6, 1, 3, 9};

int count = sizeof(a) / sizeof(*a);

int flag = 1;

for (int i = 0; i < count - 1 && 1 == flag; i++) {

flag = 0;

for (int j = 0; j < count - i - 1; j++) {

if (*(a + j) > *(a + j - 1)) {

int temp = 0;

temp = *(a + j);

*(a + j) = *(a + j - 1);

*(a + j - 1) = temp;

flag = 1;

}

}

}

for (int i = 0; i < count; i++) {

printf("%d\n", *(a + i));

}

//选择排序

int a[] = {2, 4, 5, 8, 6, 1, 3, 9};

int count = sizeof(a) / sizeof(*a);

for (int i = 0; i < count - 1; i++) {

int minIndex = i;

for (int j = minIndex + 1; j < count; j++) {

if (*(a + minIndex) > *(a + j)) {

minIndex = j;

}

if (minIndex != i) {

int temp = 0;

temp = *(a + minIndex);

*(a + minIndex) = *(a + i);

*(a + i) = temp;

}

}

for (int i = 0; i < count; i++) {

printf("%d\n", *(a + i));

}

//插入排序

int a[] = {2, 4, 5, 8, 6, 1, 3, 9};

int count = sizeof(a) / sizeof(*a);

for (int i = 1; i < count; i++) {

int j = i;

int temp = *(a + j);

while (j > 0 && temp < *(a + j - 1)) {

*(a + j) = *(a + j - 1);

j--;

}

*(a + j) = temp;

}

for (int i = 0; i < count; i++) {

printf("%d\n", *(a + i));

}

//折半查找

int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};

int count = sizeof(a) / sizeof(*a);

int start = 0, end = count - 1, mid = 0;

int x = 0;

printf("请输入你要找的数字:");

scanf("%d", &x);

while (start <= end) {

mid = (start + end) / 2;

if(*(a + mid) == x) {

printf("%d是第%d的位置\n", x, mid);

break;

} else if (*(a + mid) > x) {

end = mid - 1;

} else {

start = mid + 1;

}

}

if (*(a + mid) != x) {

printf("no\n");

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐