冒泡排序:
int a[5] = {3,1,2,7,6};
第一步:
找出最大的元素并且把它放到数组最后:
a[0] > a[1] 交换a[0] 和a[1]的值
for(int j = 0; j < 5-1; j++)
{
if(a[j] > a[j+1])
{
a[j] ^= a[j+1];
a[j+1] ^= a[j];
a[j] ^= a[j+1];
}
}
第二步:
继续找出第二大的数:
重复第一步的过程:
for(int i = 0; i < N-1; i++) //代表步数
{
for(int j = 0; j < N-1-i; j++)
{
if(a[j] > a[j+1])
{
a[j] ^= a[j+1];
a[j+1] ^= a[j];
a[j] ^= a[j+1];
}
}
}
输入一个无序字符串,将其进行冒泡排序
#include <stdio.h>
#include <string.h>
int main()
{
char str[100];
printf("please input string: ");
gets(str);
int n = strlen(str);
for(int i = 0; i < n-1; i++)
{
for(int j = 0; j < n-1-i; j++)
{
if(str[j] > str[j+1])
{
str[j] ^= str[j+1];
str[j+1] ^= str[j];
str[j] ^= str[j+1];
}
}
}
puts(str);
}
二维数组:
有两个下标的数组
一般形式:
<存储类型> <数据类型> <数组名>[行标][列标];
二维数组的初始化:
完全初始化:
int a[2][3] = {1,2,3,4,5,6};
int b[2][3] = {{1,2,3},{4,5,6}};
不完全初始化:
int a[2][3] = {1,2,3};
int b[2][3] = {0};
自动计数功能:
int a[][3] = {1,2,3,4,5,6,7,8}; //int a[3][3],只能省略行标不能省略列标
int b[][3] = {1,2,3,4};
二维数组遍历:
int a[3][4] = {1,2,3,4,5,6,7,8,9,10,11,12};
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 4; j++)
{
printf("%d ", a[i][j]);
}
puts("");
}
1、从键盘录入一个3行4列的二维数组,并且打印其最大的元素和对应下标.
2、打印杨辉三角.
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
....
a[i][0] == 1 a[i][i] == 1
i > 1, j > 0 && j < i
a[i][j] = a[i-1][j] + a[i-1][j-1]
用while循环实现数组数据的录入:
int a[3][4], i = 0, j = 0;
while(i < 3){
while(j < 4){
scanf("%d", &a[i][j]);
j++;
}
j = 0;
i++;
}
二维字符数组:
char str[3][10] = {"abc", "hello", "welcome"};
char dst[3][10];