学而时习之,不亦乐乎。
归并排序经典代码
View Code
#include<stdio.h>
#define N 10000
void Merge(int a[],int low,int mid,int high)
{
int m = mid+1 , n = high-mid;
int i,x[N],y[N];
//定义两个数组,用于分割原数组,将原数组中的元素平均非配给两个数组
for(i = 0;i < m; i++)
{
x[i] = a[low+i];
}
for(i = 0;i < n;i++)
{
y[i] = a[mid+i+1];
}
int j = 0,k = low;
i = 0;
//将两个数组进行比较合并
while(i < m && j < n)
{
if(x[i] < y[j])
{
a[k] = x[i++];
}
else
{
a[k] = y[j++];
}
k++;
}
//将剩余的元素归并到原数组
while(i < m)
a[k++] = x[i++];
while(j < n)
a[k++] = y[j++];
}
void Merge_Sort(int a[],int low,int high)
{
//先将传递过来的数组进行递归二分
if(low < high)
{
int mid = (low+high)/2;
Merge_Sort(a,low,mid);
Merge_Sort(a,mid+1,high);
Merge(a,low,mid,high);
}
}
void main()
{
int a[N],n,i;
scanf("%d",&n);
for( i = 0; i < n; i++)
scanf("%d",&a[i]);
// 直接进行调用
Merge_Sort(a,0,n-1);
for( i = 0; i < n; i++)
printf("%d ",a[i]);
}
快速排序
View Code
KMP算法
View Code
#include<stdio.h> #include<string.h> const int N = 1010; char T[1000010], P[N]; int pi[N]; int ans; void COMPUTER_PREFIX_FUNCTION(){ int m = strlen(P), i, k; for(k = pi[0] = -1, i = 1; i < m; i++){ while(k > -1 && P[k+1] != P[i]) k = pi[k]; if(P[k+1] == P[i]) k++; pi[i] = k; } } void KMP_MATCHER(){ int i, n, m, k; n = strlen(T); m = strlen(P); for(k = -1, i = 0; i < n; i++){ while(k > -1 && P[k+1] != T[i]) k = pi[k]; if(P[k+1] == T[i]) k++; if(k == m-1){ ans ++; k = pi[k]; } } } int main(){ //freopen("data.in", "r", stdin); int n; scanf("%d", &n); while(n--) { scanf("%s %s", T, P); ans = 0; COMPUTER_PREFIX_FUNCTION(); KMP_MATCHER(); printf("%d\n", ans); } return 0; }
#include<stdio.h>
void sort(int a[],int low,int high)
{
int m = low,n = high,key = a[low];
if(low > high)
return;
while(low < high)
{
while(low < high && key <= a[high])
high--;
a[low] = a[high];
while(low < high && key >= a[low])
low++;
a[high] = a[low];
}
a[low] = key;
sort(a,m,low-1);
sort(a,low+1,m);
}
void main()
{
int n,i,a[100];
scanf("%d",&n);
for(i = 0; i < n; i++)
scanf("%d",&a[i]);
sort(a,0,n-1);
for(i = 0; i < n; i++)
printf("%d ",a[i]);
}

浙公网安备 33010602011771号