数组和数组算法

一、一维数组的定义

1、定义:类型名 数组名【数组大小】

类型名必须与数组内元素对应,整型或者浮点型。

2、赋值:int a【】 ={123456789};(数组大小可以不写)

{}内数字大小不能大于数组大小,会造成数组越界;

3、数组元素存放的

单一性:所有元素所占字节数相同;

有序性:从下标小的到下标大的有序排放;

连续性:排放中间没有分隔,是连续的:1000 2000 3000 4000;

4、越界访问

seg……      fault:是越界访问的错误;

出现数组元素没有的元素,a【】={0,1,2,3},{0,1,11}也是越界访;

5、数组初始化

a【i】代表一个数组元素,不能被初始化;

数组不能被初始化:否则输出除初始化的元素其余都是0;

6:计算数组元素个数:
int len =sizeof(a)/sizeof (a[0])       

a:所占字节数

a【0】:代表数组中第一个元素的地址

总字节数 = 数组元素个数 × 每个元素占用的字节数

7:

二、排序

1、求数组中最大数:

2、选择排序

在合适的位置放上合适的数字

3、冒泡排序

相邻两个元素两两比较,判断是否需要互换位置

4、插入排序

给数组a 排序,创建一个新的数组,把a数组的数拿出来,装到b数组里面,但是要保证数组是
有序的。

5数组的遍历:

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用BFPRT算法求第k小元素的C语言代码,其中数组数组元素个数需要用户输入。 ``` #include <stdio.h> // 使用BFPRT算法求第k小元素 int BFPRT(int arr[], int left, int right, int k); // 交换数组中的两个元素 void swap(int arr[], int i, int j); // 用插入排序求中位数 int median(int arr[], int left, int right); // 使用快速排序对数组进行划分并返回枢轴元素下标 int partition(int arr[], int left, int right, int pivot); // 获取数组中第k小的元素下标 int kthSmallest(int arr[], int n, int k); int main() { int n, k, arr[1000], i; printf("请输入数组元素个数n: "); scanf("%d", &n); printf("请输入数组元素: "); for(i = 0; i < n; i++) { scanf("%d", &arr[i]); } printf("请输入第k小的k值: "); scanf("%d", &k); printf("第%d小的元素为: %d", k, kthSmallest(arr, n, k)); return 0; } // 使用BFPRT算法求第k小元素 int BFPRT(int arr[], int left, int right, int k) { int i, j, pivot; // 将数组分为若干个大小为5的子数组 for(i = left; i <= right; i += 5) { // 对每个子数组进行插入排序 j = i + 4; if(j > right) { j = right; } int temp, m; for(m = i + 1; m <= j; m++) { temp = arr[m]; int n; for(n = m - 1; n >= i && arr[n] > temp; n--) { arr[n+1] = arr[n]; } arr[n+1] = temp; } // 将子数组中位数与数组左端元素交换,并进行下一轮划分 swap(arr, left + (i - left) / 5, i + 2); } // 取中位数的中位数作为枢轴元素 if(right - left < 5) { pivot = median(arr, left, right); } else { pivot = BFPRT(arr, left, left + (right - left) / 5, (right - left) / 10); } // 根据枢轴元素进行划分,并返回枢轴元素下标 return partition(arr, left, right, pivot); } // 交换数组中的两个元素 void swap(int arr[], int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } // 用插入排序求中位数 int median(int arr[], int left, int right) { int i, j, temp; for(i = left + 1; i <= right; i++) { temp = arr[i]; for(j = i - 1; j >= left && arr[j] > temp; j--) { arr[j+1] = arr[j]; } arr[j+1] = temp; } return arr[(left + right) / 2]; } // 使用快速排序对数组进行划分并返回枢轴元素下标 int partition(int arr[], int left, int right, int pivot) { int i = left, j = left; while(j < right) { if(arr[j] < pivot) { swap(arr, i, j); i++; } j++; } swap(arr, i, right); return i; } // 获取数组中第k小的元素下标 int kthSmallest(int arr[], int n, int k) { return arr[BFPRT(arr, 0, n - 1, k - 1)]; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值