##排序方法
#快速排序:#include <stdio.h>
void quickSort(int arr[],size_t left,size_t right){
if(left >= right){
return;
}
int key = arr[left];//标准key 放在合适的位置 使得左边的元素全部<=key 右边全部的元素>=key
int i=left,j=right;
while(i<j){
//右边找一个比key小的
while(i<j && arr[j]>=key){
–j;
}//循环退出arr[j]<key
arr[i] = arr[j];
while(i<j && arr[i]<=key){
++i;
}
arr[j] = arr[i];
}
arr[i] = key;
if(i-left>1){
quickSort(arr,left,i-1);
}
if(right-i>1){//right-i>1
quickSort(arr,i+1,right);
}
}
void quick(int arr[],size_t n){
quickSort(arr,0,n-1);
}
int main(){
int arr[] = {8,2,3,9,0,3,2,4,8,6,4,5,7,0,1,3,5};
quick(arr,sizeof(arr)/sizeof(arr[0]));
int i = 0;
for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
printf("%d “,arr[i]);
printf(”\n");
return 0;
}
#插入排序
#include <stdio.h>
void quick(int arr[],size_t left,size_t right){
if(left >= right){
return;
}
int key = arr[left];//基准值 把key放在合适的位置 使得其左边的元素全部<=key,右边所有的元素全部>=key key的位置就固定
int i=left,j=right;
while(i<j){
//从右边找一个比key小的放在arr[i]
for(;i<j&&arr[j]>=key;–j);
/while(i<j && arr[j]>=key){
–j;
}/
arr[i] = arr[j];
//从左边找一个比key大的放在arr[j]
for(;i<j&&arr[i]<=key;++i);
/while(i<j && arr[i]<=key){
++i;
}/
arr[j] = arr[i];
}
arr[i] = key;
if(i-left>1){
quick(arr,left,i-1);
}
if(right-i>1){
quick(arr,i+1,right);
}
}
void print(int arr[],size_t n){
int i = 0;
for(i=0;i<n;i++){
printf("%d “,arr[i]);
}
printf(”\n");
}
void insert(int arr[],size_t n){
//把一个数字插入到一个有序的数列中
//从第2个元素开始 逐次把该元素插入到前面的数列中使之有序
int i=0,j=0;
for(i=1;i<n;i++){//从第2个元素开始往前插入
int key = arr[i];//要往前插入的数
for(j=i-1;j>=0&&arr[j]>key;–j){
//arr[j]要比key大 往后移一格
arr[j+1] = arr[j];
}
//循环退出 arr[j]<=key 说明key放在arr[j]后面
arr[j+1] = key;
}
}
int main(){
int arr[] = {9,2,7,0,1,6,3,8,2,6,7,3,10,2,1,5,5};
int len = sizeof(arr)/sizeof(arr[0]);
//quick(arr,0,len-1);
insert(arr,len);
print(arr,len);
return 0;
}
##输出整数的十六进制和二进制:
#include <stdio.h>
void bin(int num){
int i = 0;
for(i=31;i>=0;–i){
printf("%d",(num>>i)&1);
}
printf("\n");
}
void hex(int num){
int i = 0;
printf(“0X”);
int zero = 0;
for(i=7;i>=0;–i){
int n = (num>>4*i)&0XF;//15
if(n<10){
if(n0 && zero0){
continue;
}
printf("%c",‘0’+n);
}else{
printf("%c",‘A’+(n-10));
}
zero = 1;
}
printf("\n");
}
int main(){
int n = 0;
scanf("%d",&n);
bin(n);
hex(n);
return 0;
}
##求偶数的质数之和:
4=1+3
#include <stdio.h>
void func(int arr[10]){
printf("%d\n",sizeof(arr));//4/8
int i = 0;
for(i=0;i<5;i++){
printf("%d “,arr[i]);
}
printf(”\n");
}
//size_t unsigned int
void print(int arr[],size_t len){
int i = 0;
for(i=0;i<len;i++){
printf("%d “,arr[i]);
}
printf(”\n");
}
int main(){
int arr[5] = {1,2,3,4,5};
printf("%d\n",sizeof(arr));//20
//func(arr);
print(arr,5);
int brr[5] = {2,2,3,9,9};
//func(brr);
print(brr,5);
int crr[10] = {1,2,2,3,3,4,4,4,5,6};
//func(crr);
print(crr,10);
return 0 ;
}
##最大子串和:
#include <stdio.h>
int sumOfArrChild(int arr[],size_t len){
//int max = 1<<31;//最大子串和
int max = arr[0];
int currsum = 0;//当前子串和
int i = 0;
for(i=0;i<len;i++){//遍历数组元素
currsum += arr[i];//记录当前子串和 累加当前元素
if(currsum > max){//跟之前记录的最大子串和比较
max = currsum;
}
if(currsum < 0){//如果累加上当前元素之后小于0 负数累加只会越来越小
currsum = 0;//累加下一个元素时
}
}
return max;
}
int main(){
unsigned int n = 0;
printf(“请输入数组长度:”);
scanf("%u",&n);
int arr[n];
printf(“请输入%d个整数:”,n);
int i = 0;
for(i=0;i<n;i++){
scanf("%d",&arr[i]);
}
int s = sumOfArrChild(arr,n);
printf("%d\n",s);
return 0;
}