设为首页 加入收藏

TOP

C语言之数组
2015-02-02 14:26:43 来源: 作者: 【 】 浏览:5
Tags:语言

1,数组简介:
所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。


2,例子要求:
针对数组这个最基础的数据结构,列举这个数据结构可以支持的操作,并以大O的方式分析各个操作的时间复杂度


3,实现过程:


#include
//数组的基本操作,排序,取最大值,模糊查询某个值


// 【1】数组排序 算法
// 1.1, 冒泡排序 O(n2)
最好的是数组有序情况下为:O(2N),


平均是正常随机乱序为:O(2N),


最差的是数据完全乱序O(n2)。


void BubbleSort(int A[], int N)


{


?int tmp;
?for (i = 0; i < N - 1; ++i)
?{
?for (j = 1; j < N - i; ++j)
?{
?if (A[j] > A[j - 1]) //从大到小排序,把较小的交换到后面来
?{
?tmp = A[j - 1];
?A[j - 1] = A[j];
?A[j] = tmp;
?}
?}
?}
}


?



// 1.2 快速排序,它的平均时间复杂度为O(Nlog2N)
最好的是数组有序情况下时间复杂度为:O(nlogn),
平均是正常随机乱序时平均时间复杂度为:O(nlogn)。 ,
最差的是数据完全乱序O(n^2)。
int Partition(int *arr, int low, int high)
{
?int pivot = arr[low];
?while(low < high)
?{
?while(low < high && arr[high] <= pivot) high--;
?arr[low] = arr[high];
?while(low < high && arr[low] >= pivot) low++;
?arr[high] = arr[low];
?}
?arr[low] = pivot;
?return low;
}



void Qsort(int *arr, int low, int high)
{
?if (low < high)
?{
?int mid = Partition(arr, low, high);
?Qsort(arr, low, mid - 1);
?Qsort(arr, mid + 1, high);
?}
}



// 【2】 数组取最大值 算法
最好情况下,最大值在第一个,时间复杂度为:O(n^2)
平均是,最大值在中间位置,时间复杂度:O(n).
最差是,最大值在末尾,时间复杂度:O(2^n)
int max(int array[],int n);
void main( )
{
?int num[N],count,i,val;
? scanf("%d",&count);
?for (i=0;i?{
?scanf("%d",&num[i]);
?}
?val=max(num,count);
?printf("%dn",val);
?}


int max(int array[ ],int n)
{
?if (n<=1)
?return(array[0]); // 就一个数,最大值就是自已
?int t=max(array+1,n-1); // 求后面 n-1个数的最大值
?if (t>array[0]) // t 比第一个大,返回最大 t
?return(t);
?else
?return(array[0]); // t小,返回array[0];
}


// 【3】 数组查询是否包含某个值
最好情况下,就是第一个,时间复杂度为O(1);
平均情况下,值在中间,时间复杂度为0(N/2);
最坏情况下,值在末尾或者不存在,时间复杂度为O(N);
int main()
{
?int n,m,i,a[20];
?int find;
?scanf("%d",&n);
?for(i=0;i?scanf("%d",&a[i]);
?}
?scanf("%d",&m);
?find = -1;
?for(i=0;i?if(a[i] == m){
?find = i;
?break;
?}
?}


?if(find < 0) {
?printf("Non");
?}
?else {
?printf("%dn", find);
?}
?return 0;
}



// 【4】数组输入输出,一时没有想到用什么算法,顺序遍历?


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C语言之双向链表 下一篇【经典面试题】统计数组

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: