您的位置:首页 > 编程语言 > C语言/C++

黑马程序员——C语言之选择排序、折半查找法与二维数组

2015-07-06 09:18 471 查看
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

19.选择排序

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

for (int j = i+1;
j<len; j++) {

if (a[j]<a[i]) {

temp = a[i];

a[i] = a[j];

a[j] = temp;

}

for (int k = 0;
k < len; k++) {

printf("%d ",a[k]);

}

printf("\n");

}

printf("\n");

}

20.折半查找法

①基本思路:在有序表中,取中间元素作为比较对象,若给定值与中间元素的要查找的数相等,则查找成功;若给定值小于中间元素的要查找的数,则在中间元素的左半区继续查找; 若给定值大于中间元素的要查找的数,则在中间元素的右半区继续查找。不断重复上诉查找过程,直到查找成功。

#include <stdio.h>

int find(int a[],int num,int len){

int low=0,mid=0,high=0,key=0;

int flag = 1;

printf("len is %d\n",len);

low = 0,high = len-1;

while(flag){

mid = (low+high)/2;

if (a[mid] < num) {

low = mid;

}

if (a[mid] > num) {

high = mid;

}

if (a[mid] == num) {

key = mid;

flag = 0;

}

}

return key;

}

int main(int argc, const char *
argv[]) {

int a[] = {12,23,34,42,56,63,72,89,94};

int len = sizeof(a) / sizeof(int);

int num = 23;

int key = find(a, num,len);

printf("the key number is %d,key is %d\n",num,key);

return 0;

}

21.二维数组

①一个一维数组的每个元素又被声明为一个一维数组,从而构成二维数组,可以说是二维数组是一个特殊的一维数组。

②定义: 数组名[第一维的长度(行)] [第二维的长度(列)]; int a[2][3]; int b[1+3][3} ; #difine M 3 int c[M][M+3]。

③初始化:

1)完全初始化:

正常赋值:int a[2][3] = {{1,2,3},{2,3,4}};

连续赋值:int a[2][3] = {1,2,3,4,5,6};

可以省略第一维:int a[][3] = {{1,2,3},{4,5,6},{7,8,9}}; //等价于int a[3][3];

int a[][2] = {1,2,3,4,5,6,7,8}; //等价于int a[4][2]={1,2,3,4,5,6,7,8};

2)部分初始化:

int a[3][4]= {1}; //a[0][0]被赋值为1,其他全为0;

④存储方式:

1)计算机会给二维数组分配一块连续的存储空间;

2)数组名代表数组的首地址,从首地址开始,依次存入第一行、第二行....第n行;

3)每一行的存储方式,从行首地址开始,依次存储行的第1个元素、第2个元素...第n个元素;

4)每个元素占用相同的字节数(取决于数组类型);

5)并且数组中元素之间的地址是连续的;

6)首地址 = 数组名地址 = 第一行的地址 = 第一行第一个元素地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: