$ ./a.out facesho Google Facebook
运行输出:[INFO,faceshoGoogleFacebook]
1563C 排序算法
有种排序叫做猴子排序(Bogo Monkey):
1、检查是否排好
2、打乱
3、检查是否排好
4、打乱
5、……
如果数据稍多的话,几乎是不可能排序好的。
排序代码:
#include <time.h>
#include <stdlib.h>
#include <stdbool.h>
void swap(int* x, int* y){
//交换
int temporary = *x;
*x = *y;
*y = temporary;
}
void randomize(int arr[], int length){
//打乱数组
for(int i = 0; i < length; i++){
srand(time(NULL)+i);//引入i增加随机性
if(rand()%2) swap(&arr[i],&arr[i+1]);
}
//printf("!");//记录打乱次数
}
bool isSorted(int arr[], int length){
for(int i = 0; i < length; i++) if(arr[i]>=arr[i+1]) return false;
return true;
}
void bogoSort(int array[], int length){
while(!isSorted(array,length)) randomize(array,length);
}
Demo:
#include <stdio.h>
int main(){
int numbers[] = {20,9,233,0,-23,7,1,666,4,345,63,45,2,45};
bogoSort(numbers,14);//也可以改成更小
for(int i = 0; i < 14; i++) printf("%d,",numbers[i]);
}
1562C 排序算法
1. 希尔排序缩小递增量必须是要互质的。
2. 快速排序可以不用交换中间值。
以下代码仅供参考:
void Array_Map_Sort_Quickly_Extrem(int* Array, int start, int end)
{
int i=start;
int j=end;
int Pivot = Array[end];
if(start<end)
{
while(i<j)
{
while(i<j &&Array[i]<=Pivot) i++;//Note: i choose the end as parameter
Array[j]=Array[i];
while(i<j &&Array[j]>=Pivot) j--;
Array[i]=Array[j];
}
Array[i]= Pivot;
}
else
return;
Array_Map_Sort_Quickly_Extrem(Array,start,i-1);
Array_Map_Sort_Quickly_Extrem(Array,i+1,end);
}
1561C 命令行参数
main 的两个参数的参数名如下:
int main( int argc, char *argv[] )
并不一定这样写,只是约定俗成罢了。但是亦可以写成下面这样:
int main( int test_argc, char *test_argv[] )
任意你喜欢的名字。
但是大部分人还是写成开头那样的,如下:
int main( int argc, char *argv[] )
1560C 内存管理
对于我们手动分配的内存,在 C 语言中是不用强制转换类型的。
description = malloc( 200 * sizeof(char) ); // C 语言正确。
description = malloc( 200 * sizeof(char) ); // C++ 错误
1564C 标准库 - stdarg.h
变参使用实例 test.c:
#include <stdio.h> #include <string.h> #include <stdarg.h> void tLog(char *sInfo, ...); int main(int argc, char *argv[]) { char str[4+1] = {0}; strcpy(str,"INFO"); tLog(str,argv[1],argv[2],argv[3]); return 0; } void tLog(char *sInfo, ...) { char *str = NULL; char *str1 = NULL; char *str2 = NULL; va_list sArgv; // 申请参数列表变量 va_start(sArgv, sInfo); // 申明最后一个传递给函数的已知的固定参数 /* 依次读取固定参数 sInfo 后的 参数 */ str = va_arg(sArgv, char*); str1 = va_arg(sArgv, char*); str2 = va_arg(sArgv, char*); va_end(sArgv); printf("运行输出:[%s,%s%s%s]\n",sInfo,str,str1,str2); }编译 gcc test.c 得到 a.out。
运行程序:
1563C 排序算法
有种排序叫做猴子排序(Bogo Monkey):
如果数据稍多的话,几乎是不可能排序好的。
排序代码:
#include <time.h> #include <stdlib.h> #include <stdbool.h> void swap(int* x, int* y){ //交换 int temporary = *x; *x = *y; *y = temporary; } void randomize(int arr[], int length){ //打乱数组 for(int i = 0; i < length; i++){ srand(time(NULL)+i);//引入i增加随机性 if(rand()%2) swap(&arr[i],&arr[i+1]); } //printf("!");//记录打乱次数 } bool isSorted(int arr[], int length){ for(int i = 0; i < length; i++) if(arr[i]>=arr[i+1]) return false; return true; } void bogoSort(int array[], int length){ while(!isSorted(array,length)) randomize(array,length); }Demo:
#include <stdio.h> int main(){ int numbers[] = {20,9,233,0,-23,7,1,666,4,345,63,45,2,45}; bogoSort(numbers,14);//也可以改成更小 for(int i = 0; i < 14; i++) printf("%d,",numbers[i]); }1562C 排序算法
1. 希尔排序缩小递增量必须是要互质的。
2. 快速排序可以不用交换中间值。
以下代码仅供参考:
void Array_Map_Sort_Quickly_Extrem(int* Array, int start, int end) { int i=start; int j=end; int Pivot = Array[end]; if(start<end) { while(i<j) { while(i<j &&Array[i]<=Pivot) i++;//Note: i choose the end as parameter Array[j]=Array[i]; while(i<j &&Array[j]>=Pivot) j--; Array[i]=Array[j]; } Array[i]= Pivot; } else return; Array_Map_Sort_Quickly_Extrem(Array,start,i-1); Array_Map_Sort_Quickly_Extrem(Array,i+1,end); }1561C 命令行参数
main 的两个参数的参数名如下:
并不一定这样写,只是约定俗成罢了。但是亦可以写成下面这样:
任意你喜欢的名字。
但是大部分人还是写成开头那样的,如下:
1560C 内存管理
对于我们手动分配的内存,在 C 语言中是不用强制转换类型的。
但是 C++ 是强制要求的,不然会报错。