今天看了快速排序
效率真的很高,但是总感觉不稳,虽然比冒泡强,但是保不齐某些情况下时间复杂度和冒泡一样。
让我一下子生撸这么多代码我是做不到的,还得多看多敲,培养强大的算法思维才行啊。
#include<iostream>
#include <cstdio>
#include <cmath>>
using namespace std;
#define N 6
int partition(int arr[], int low, int high){
int key;
key = arr[low];
while(low<high){
while(low <high && arr[high]>= key )
high--;
if(low<high)
arr[low++] = arr[high];
while( low<high && arr[low]<=key )
low++;
if(low<high)
arr[high--] = arr[low];
}
arr[low] = key;
return low;
}
void quick_sort(int arr[], int start, int end){
int pos;
if (start<end){
pos = partition(arr, start, end);
quick_sort(arr,start,pos-1);
quick_sort(arr,pos+1,end);
}
return;
}
int main(void){
int i;
int arr[N]={32,12,7, 78, 23,45};
printf("排序前 \n");
for(i=0;i<N;i++)
printf("%d\t",arr[i]);
quick_sort(arr,0,N-1);
printf("\n 排序后 \n");
for(i=0; i<N; i++)
printf("%d\t", arr[i]);
printf ("\n");
system("pause");
return 0;
}
今天做的10个题好几个没有ac,思路明明很清晰,代码也敲出来了,可是就是没有ac…还得加油做。春节前昨完,跳着做的话平均一天12道。现在做的比较慢,主要也是很多算法没有接触过,得先学。
贴一道经典题目
国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。
请计算在前K天里,骑士一共获得了多少金币。
#include <stdio.h>
int main()
{
int n,i,j,k,sum;
while(scanf("%d",&n)!=EOF)
{
sum=0; j=1; k=1;
for(i=1;i<=n;i++){
sum+=k;
if(i==j){
k++;
j+=k;
}
}
printf("%d\n",sum);
}
}