c语言复习:数组

注:本文是苏小红版c语言程序设计第8章的笔记

  1. 定义数组时不可以用变量定义数组的大小
  2. int score [5] = {1, 2, 3, 4, 5}; <=> int score[] = {1, 2, 3, 4, 5};
  3. static int score[5] <=> static int score [5] = {0,0,0,0,0}
  4. 数组第二维的长度声明永远都不能省略, 因为C中二维数组的元素是按行存放的(即现存第一行,再存第二行…)
  5. 向函数传递一维数组:
void Readscore(int score[], int n);
...
int score[N];
...
Readscore(score, n);//数组名作函数实参调用函数
  1. 数组作函数形参时,数组的长度可以不出现在数组名后面的方括号内,通常是用另一个整型形参来制定数组的长度。(因为即使写了编译器也只检查是否是负数,并不能真正表示出接受的数组的大小)
  2. 排序
    1. 交换排序(以降序为例):
void descending(int score[], int n)
{
	int i, j;
	int temp;
	for(i = 0; i < n; i ++)
	{
		for(j = i + i; j < n; j ++)
		{
			if(score[i] < score[j])
				{
				temp = score[i];
				score[i] = score[j];
				score[j] = temp;
				}
		}
	}
}
  1. 选择排序(以降序为例):
void descending(int a[], int n)
{
int i, j, k;
int temp;
for(i = 0; i < n; i ++)
	{
	k = i;
	for(j = i + 1; j < n; j ++)
		{
		if(a[j] < a[k]) k = j;
		}
		temp = a[j];
		a[j] = a[k];
		a[k] = temp;
	}
}
  1. 冒泡排序(以降序为例):不断交换相邻的两个数
void descending(int a[], int n)
{
int i, j;
int temp;
for (i = 0; i < n - 1; i ++)//注意有减1!
	{
	for(j = 0; j < n - i - 1; j ++)//注意有减1!
		{
		if(a[j] < a [j + 1])
			{
			temp = a[j];
			a[j] = a[j + 1];
			a[j + 1] = temp;
			}
		}
	}
}
  1. 折半查找(以降序数组为例)
int Binsearch(int a[], int n, int x){
    int low, high, mid;
    low = 0;
    high = n - 1;

    while(low <= high){
        mid = low + (high - low)/2;
        if(a[mid] > x){
            low = mid + 1;
        }else if(a[mid] < x){
            high = mid - 1;
        }else{return (mid);}
    }
    return -1;
}

也可以使用标志变量法

int Binsearch(int a[], int n, int x){
    int low, high, mid;
    low = 0;
    high = n - 1;
    int find = 0;

    while(low <= high && !find){
        mid = low + (high - low)/2;
        if(a[mid] > x){
            low = mid + 1;
        }else if(a[mid] < x){
            high = mid - 1;
        }else{
        	pos = mid;
        	find 1;
        	}
    }
    return pos;
}

猜你喜欢

转载自blog.csdn.net/XIAOHEwenjue/article/details/84594098