//数组, 可以快速创建多个变量, 数组本质上就是一个大容器
//数组的缺点:数组中定义的所有的变量数据类型都是相同的
//注意:1.定义数组时,数组元素个数必须是常量或者常量表达式
//2.数组所占的存储空间 = 数组元素个数 * 每个元素所在的空间大小
//3.定义数组时, 数组的元素个数是可以省略的.
//系统不会检测数组下标越界 0-(数组元素个数-1)
//
// //求最大,第二大, 最小
// int max = 0;
// int min = 40;
// int secondMax = 0;
// int a[7] = {0};
// for (int i = 0; i < 7; i++) {
// a[i] = arc4random() % (40-20+1)+20;
// printf("%d ", a[i]);
// if (min > a[i]) {
// min = a[i];
// }
// if(a[i] > max)
// {
// secondMax = max; //先把max的值给secondMax
// max = a[i]; //在存储当前最大值
// }else if (a[i] != max && a[i] > secondMax){
// secondMax = a[i];
// //第二大值存储当前值需要满足的条件:
// //1 当前值不能和最大值相等,
// //2 当前值必须大于第二大值.
// }
//
// }
// printf("
最大:%d ", max );
// printf("
第二大:%d ", secondMax);
// printf("
最小:%d", min);
// for (int i = 0; i < 4; i++) {
// for (int j = i + 1; j < 5; j++) {
// if(a[i] > a[j])
// {
// int temp = a[i];
// a[i] = a[j];
// a[j] = temp;
// }
// }
// }
// printf("
最大:%d ", a[4]);
// printf("
第二大:%d ", a[3]);
// printf("
最小:%d", a[0]);
////////////////////////////////
///2个数组的和,放到第三个数组中
// int a[10] = {0};
// int b[10] = {0};
// int c[10] = {0};
// for (int i = 0; i < 10; i++) {
// a[i] = arc4random() % (40-20+1) + 20;
// b[i] = arc4random() % (40-20+1) + 20;
// c[i] =a[i] + b[i];
// printf("%d ", a[i]);
// }
// printf("
+");
// for (int i = 0; i < 10; i++) {
// printf("%d ", b[i]);
// }
// printf("
=");
// for (int i = 0; i < 10; i++) {
// printf("%d ", c[i]);
// }
//冒泡排序思想:每趟排序都将最大的数放到右边, 右边是有序区, 左边是无序区;
//数组a排成升序序列, 冒泡采用双层for循环
//**外层 -1 可以不减, 减 1 的目的是为了缩短排序的趟数, 提高程序的执行效率,最后一个数的时候,就没有必要在比较了
//**内层 -i 可以不减, 减 i 的目的是为了缩小无序的范围, 提高程序的执行效率
//**内层 -1 必须要减, 减 1 的目的是防止比较越界,和一个不属于数组范围内的数进行比较,, 即,最后一个数与不在数组内的数比较
//
// int a[10] = {23, 24, 11, 15, 16, 25, 17, 26, 18, 10};
// for (int i = 0; i < 10; i++) {
// a[i] = arc4random() % (30 - 10 + 1) + 10;
// printf("%d, ", a[i]);
// }
// int num = 0, num1 = 0;
// for (int i = 0; i < 10 - 1; i++) {
// for (int j = 0; j < 10 - 1 - i; j++) {
// if(a[j] > a[j+1] ) {
// int temp = a[j];
// a[j] = a[j+1];
// a[j+1] = temp;
// num++;
// }
//
// }
// }
//
//
// for (int i = 0; i < 10 - 1; i++) {
// for (int j = i + 1; j < 10; j++) {
// if(a[i] > a[j] ) {
// int temp = a[i];
// a[i] = a[j];
// a[j] = temp;
// num1++;
// }
//
// }
// }
//
// printf("
");
// for (int i = 0; i < 10; i++) {
// printf("%d ", a[i]);
// }
// printf("
");
// printf("num = %d, num1 = %d", num, num1);
//随机产出20个数, 从小到大排序
// int b[20] = {0};
// for (int i = 0; i < 20; i++) {
// b[i] = arc4random() % (40 - 20 + 1) + 20;
// printf("%d, ", b[i]);
// }
//
//
// for (int i = 0; i < 20 - 1; i++) {
// for (int j = 0; j < 20 - 1 - i; j++) {
// if(b[j] > b[j + 1])
// {
// int temp = b[j];
// b[j] = b[j + 1];
// b[j + 1] = temp;
//
// }
// }
// }
//
// // for (int i = 0; i < 20 - 1; i++) {
// // for (int j = i + 1; j < 20; j++) {
// // if (b[i] > b[j]) {
// // int temp = b[i];
// // b[i] = b[j];
// // b[j] = temp;
// // }
// // }
// // }
//
// printf("
");
// for (int i = 0; i < 20; i++) {
// printf("%d ", b[i]);
// }
//随机产生5个数, 从大到小排序.
// int a[5] = {0};
// for (int i = 0; i < 5; i++) {
// a[i] = arc4random() % (40 - 20 + 1 ) + 20;
// printf("%d ", a[i]);
// }
// for (int i = 0; i < 5 - 1; i++) {
// for (int j = 0; j < 5 - 1 -i; j++) {
// if (a[j] < a[j + 1]) {
// int temp = a[j];
// a[j] = a[j + 1];
// a[j + 1] = temp;
// }
// }
// }
// printf("
");
// for (int i =0 ; i < 5; i++) {
// printf("%d ", a[i]);
// }
//
///////////////////
//字符数组
//char str[4] = {'a', 'b', 'c', 'd'};
//字符串, 结束标志: ' ' 对应的整数值是 0
char str[10] = "hello";
//输出字符串格式, %s,数组名; %s的工作原理: 从第一个字符开始, 一个字符一个字符的输出,直到遇到 ' ' 结束
printf("%s", str);
/////字符数组所占的内存空间////
//1.指定元素个数.
char str1[10] = "iPhone";
//unsigned long(lu),
//sizeof() 可以用来求变量, 数组, 数据类型, 所占存储空间大小
printf(" %lu
", sizeof(str1));
//2.不指定元素个数, 字符串结束标志 ' ' 也是占存储空间
char str2[] = "iPhone";
printf(" %lu
", sizeof(str2));
//
//*************Lesson-04 作业*****************
//
//1.打印数组
// int a[SIZE] = {0},i = 0;
// for(i = 0; i < SIZE; i++)
// {
// a[i] = i+10;
// printf("a[%d] = %d
", i, a[i]);
// }
// 2. (*)将第一题中的数组a反向输出。
// for(i = SIZE-1;i>=0;i--)
// {
// printf("a[%d] = %d
", i, a[i]);
// }
// 3. (*)对第一题中的数组进行求和操作,打印计算结果。
// int sum = 0;
// for(i = 0; i < SIZE; i++)
// {
// a[i] = i+10;
// sum = sum + a[i];
// }
// printf("sum = %d", sum);
//
//// 4. (**)计算第一题数组连减,打印计算结果。
//
// int sub = 0;
// for(i = 0; i < 2; i++)
// {
// a[i] = i+10;
// sub = sub - a[i];
// }
// printf("sub = %d", sub + 2 * a[0]);
// 5. (**)随机产生 20 个 10~50 的正整数存放到数组中,并求数组中的多有 元素最大值、最小值、平均值及各元素之和。
// int i = 0, max = 0, min = 50, avg = 0, sum = 0;
// int num[20] = {0};
// for(i = 0; i < 20; i++)
// {
// num[i] = arc4random()%(50-10+1)+10;
// printf("%d ", num[i]);
// sum = sum + num[i];
// if(num[i] > max)
// max = num[i];
//
// if(num[i] < min)
// min = num[i];
// }
// avg = sum/20;
// printf("
max = %d",max);
// printf(" min = %d", min);
// printf(" avg = %d", avg);
// printf(" sum = %d", sum);
// 6. 编写一个程序,输入两个包含 5 个元素的数组,先将两个数组升序排序,然 后将这两个数组合并成一个升序数组。
//
// int a[5] = {0}, b[5] = {0};
// int i = 0, j = 0, temp;
// printf("Input a 数组的5个元素:");
// for(i = 0;i < 5;i++)
// {
// scanf("%d", &a[i]);
// }
// printf("Input b 数组的5个元素:");
// for(i = 0;i < 5;i++)
// {
// scanf("%d", &b[i]);
// }
//
// //利用冒泡排序,将a数组升序排序
// for (i = 0; i < 4; i++) {
// for(j = i + 1; j < 5; j++)
// {
// if(a[i] > a[j])
// {
// temp = a[i];
// a[i] = a[j];
// a[j] = temp;
// }
// }
// }
// //冒泡排序,将b数组升序排序
// for (i = 0; i < 4; i++) {
// for(j = i + 1; j < 5; j++)
// {
// if(b[i] > b[j])
// {
// temp = b[i];
// b[i] = b[j];
// b[j] = temp;
// }
// }
// }
// for (i = 0; i < 5; i++) {
// printf("%d ",a[i]);
// }
// printf("
");
// for (i = 0; i < 5; i++) {
// printf("%d ",b[i]);
// }
// int c[10] = {0};
// int k = 0;
// //组合新数组
// for(i = 0; i < 10; i++)
// {
// if(i < 5)
// {
// c[k++] = a[i];
// }
// else
// {
// c[k++]=b[i-5];
// }
// }
//
// //冒泡排序,将c数组升序排序
// for (i = 0; i < 9; i++) {
// for(j = i + 1; j < 10; j++)
// {
// if(c[i] > c[j])
// {
// temp = c[i];
// c[i] = c[j];
// c[j] = temp;
// }
// }
// }
// printf("
");
//
// for(k = 0; k < 10; k++)
// {
// printf("%d ", c[k]);
// }
// 7. (***)给定某年某月某日,输出其为这一年的第几天。
// 闰年:能被 4 整除, 且不能被 100 整除 或者 能被 400 整除
// int year = 0, mon = 0, day = 0;
// printf("Enter year-mon-day:");
// scanf("%d-%d-%d", &year, &mon, &day);
//
// //1,3,5,7,8,10,12是31天, 4,6,9,11是30天, 2月闰年29,平年28
// int isNonleap = 28;
//
// isNonleap = ((year%4==0 && year%100!=0)||(year%400==0)) ? 29 : isNonleap;
//
// int monDays[12] = {31, isNonleap, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//
// int count = day;
// for (int i = 0; i < mon - 1;i++) {
// count += monDays[i];
//
// }
//printf("给定的日期是这一年的第 %d 天",count);
// 8. (**)编写整型值数组排序程序(冒泡排序、选择排序、快速排序--升序)
//int a[] = {3,-9,32,77,63,-24,14,0,21,45};
//冒泡排序法
// for( int i = 0; i < 9; i++)
// {
// for( int j = i + 1; j < 10; j++)
// {
// if(a[i] > a[j])
// {
// int temp = a[i];
// a[i] = a[j];
// a[j] = temp;
// }
// }
// }
// for (int i = 0; i < 10; i++) {
// printf("%d ",a[i]);
// }
//选择排序
// int min = 0;
// for(int i = 0;i < 9; i++)
// {
// min = i;//查找最小值
// for(int j = i + 1;j < 10;j++){
// if(a[min] > a[j])
// min = j;//交换
// }
// if(min != i)
// {
// int t = a[min];
// a[min] = a[i];
// a[i] = t;
// }
// }
// for (int i = 0; i < 10; i++) {
// printf("%d ",a[i]);
// }
//快速排序
//quicksort(a, 0, 9);
//for (int i = 0; i < 10; i++) {
// printf("%d ",a[i]);
//}
// 9、(***)找出下列整型数组中最大和最小值及其所在位置 i。
// int a[] = {5,-9,32,77,64,-24,84,0,21,45};
// int i = 0, max = 0, min = 100, maxaddress = 0, minaddress = 0;
// for(i = 0; i < 10; i++)
// {
// if(a[i] > max)
// {
// max = a[i];
//
// maxaddress = i;
// }
// if(a[i] < min)
// {
// min = a[i];
// minaddress = i;
// }
//
// }
// printf("最大值%d,位置%d
最小值%d,位置%d", max, maxaddress+1, min, minaddress + 1 );
// 10、(*)把 str1, str2, str3 合并到 result 数组中。结果:“Lanou 23_class is niu best!”
// char result[50] = {0};
// char str1[] = "Lanou ";
// char str2[] = "23_class ";
// char str3[] = " is niu best!";
// strcat(result, str1);
// strcat(result, str2);
// strcat(result, str3);
// printf("%s",result);
return 0;
}
//快速排序 函数
void quicksort(int a[],int low,int high)
{
int i = low;
int j = high;
int temp = a[i];
if( low < high)
{
while(i < j)
{
while((a[j] >= temp) && (i < j))
{
j--;
}
a[i] = a[j];
while((a[i] <= temp) && (i < j))
{
i++;
}
a[j]= a[i];
}
a[i] = temp;
quicksort(a,low,i-1);
quicksort(a,j+1,high);
}
}