目录
C语言
一、数组:
一个固定长度的存储相同数据类型的数据结构。
使用数组之前,需要声明这个数组。需要指定以下内容:type name[size]
(1)数据类型 数组存储数据的类型(字符、整型、浮点型)
(2)名称 标识这个数组并与之交互的变量名
(3)数量 这个数组最多能存储的数据元素的数量
1、一维数组
int a[10]={0,1,2,3,4,5,6,7,8} //大括号{}之间的值的数目不能大于在数组声明时在方括号[]中指定的元素数目。
int b[]={1,2,3}//如果省略掉了数组的大小,数组的大小则为初始化时元素的个数
上面为初始时分配值,也可初始化后分配值:
int a[10],i;
for(i=0;i<=9;i++)
scanf("%d",&a[i]);
2、二维数组
例:将二维数组a的行列元素互换,存在数组b输出
#include<stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2],i,j;
for(i=0;i<=1;i++)
for(j=0;j<=2;j++)
b[j][i]=a[i][j];
for(j=0;j<=2;j++)
{
for(i=0;i<=1;i++)
printf("%d ",b[j][i]);
printf("\n");
}
return 0;
}
3、多维数组
多个维度来表示数据,我们将其称之为多维数组,可以使用多个索引来访问多维数组中的元素。
二、排序算法比较与梳理
1、冒泡排序
原理
比较两个相邻的元素,将值大的元素交换至右端。
思路
依次比较两个相邻的数,将小数放到前面,大数放到后面
第一趟:首先比较第 1 个数和第 2 个数,将小数放前,大数放后。然后比较第 2 个数和第 3 个数,将小数放前,大数放后,如此一直继续下去,直到比较最后两个数,将小数放前,大数放后。然后重复第一趟步骤,直到所有排序完成。
第一趟比较完成后,最后一个数一定是数组中最大的一个数,所以第二趟比较的时候最后一个数不参与比较。
第二趟完成后,倒数第二个数也一定是数组中第二大的数,所以第三趟比较的时候最后两个数不参与比较。
依此类推……
#include <stdio.h>
void s(int a[], int len)
{
int i,j,t;
for(i=0;i<len-1;i++)
for(j=0;j<len-1-i;j++)
if(arr[j]>arr[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
int main()
{
int a[]={22,34,3,32,82,55,89,50,37,5,64,35,9,70};
int l=(int)sizeof(a)/sizeof(*a);
s(a,l);
int i;
for (i=0;i<l;i++)
printf("%d ",a[i]);
return 0;
}
2、插入排序
原理
插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序。是稳定的排序方法。
思路
将一个数据插入到已经排好序的有序数据中
- 将要排序的是一个乱的数组 int arrays[] = {3, 2, 1, 3, 3}
- 在未知道数组元素的情况下,我们只能把数组的第一个元素作为已经排好序的有序数据,也就是说,把{3}看成是已经排好序的有序数据
第一趟排序:
用数组的第二个数与第一个数(看成是已有序的数据)比较
- 如果比第一个数大,那就不管他
- 如果比第一个数小,将第一个数往后退一步,将第二个数插入第一个数去
第二趟排序:
用数组的第三个数与已是有序的数据 {1,2,3,3,3} (刚才在第一趟排的)比较
- 如果比 2 大,那就不管它
- 如果比 2 小,那就将 2 退一个位置,让第三个数和1比较
在第二步中:
- 如果第三个数比 1 大,那么将第三个数插入到 2 的位置上
- 如果第三个数比 1 小,那么将 1 后退一步,将第三个数插入到 1 的位置上
后面依此类推
void a(int a[], int l)
{
int i,j,k;
for (i=1;i<l;i++)
{
k=a[i];
j=i-1;
while((j>=0)&&(a[j]>k))
{
a[j+1]=a[j];
j--;
}
a[j+1]=k;
}
}
3、选择排序
原理
选择排序是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
思路
举例:数组 int arr[] = {5,2,8,4,9,1}
第一趟排序: 原始数据:5 2 8 4 9 1
最小数据1,把1放在首位,也就是1和5互换位置,
排序结果:1 2 8 4 9 5
第二趟排序:
第1以外的数据{2 8 4 9 5}进行比较,2最小,
排序结果:1 2 8 4 9 5
第三趟排序:
除1、2以外的数据{8 4 9 5}进行比较,4最小,8和4交换
排序结果:1 2 4 8 9 5
第四趟排序 :
除第1、2、4以外的其他数据{8 9 5}进行比较,5最小,8和5交换
排序结果:1 2 4 5 9 8
第五趟排序:
除第1、2、4、5以外的其他数据{9 8}进行比较,8最小,8和9交换
排序结果:1 2 4 5 8 9
public static void sort(int arr[])
{
for(int i=0;i<arr.length;i++)
{
int min = i; //最小元素的下标
for(int j=i+1;j<arr.length;j++)
{
if(arr[j] < arr[min])
{
min = j; //找最小值
}
} //交换位置
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}