概述
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 %dn",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 %dn",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)首地址 = 数组名地址 = 第一行的地址 = 第一行第一个元素地址
最后
以上就是过时水蜜桃为你收集整理的C语言 选择排序、折半查找法与二维数组的全部内容,希望文章能够帮你解决C语言 选择排序、折半查找法与二维数组所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复