#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
/*
strcpy,strcmp,strncpy,strncmp,strcat,strlen,strtok,memcpy,memcmp,memset
*/
/*
数组
冒泡,选择,垒堆,快速,桶排,筛选法,
*/
#if 0
void main()
{
int a[] = {7,6,1,2,3,4,5,9,8,10};
int n = sizeof(a)/sizeof(a[0]);
//a[i] a[a[i]-1]
int i,t;
for(i = 0;i<n;)
{
t = a[a[i]-1];
a[a[i]- 1] = a[i];
a[i] = t;
if(i == a[i] - 1)
++i;
}
for(i = 0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
#endif
/*
1 1 1 4 4 4 7 7 7 8 8 8 4 2 3 3 0 0 6 6
1~10,1~10出现的次数
*/
#if 0
void main()
{
int a[] = {1,1,1,1,5,5,5,5,7,7,7,7,8,8,8,6,6,5,5,4,4,3};
int n = sizeof(a)/sizeof(a[0]);
int b[11] = {0};
int i;
for(i = 0;i<n;i++)
b[a[i]]++;
for(i = 1;i<11;i++)
printf("%d is %d\n",i,b[i]);
}
#endif
/*
相邻的两两进行比较,如果满足,就立马换
5 4 3 6 0 9 8 1 2 4 趟数i,次数j
4 3 5 0 6 8 1 2 4 9
*/
#if 0
void main()
{
int a[] = {5,4,3,6,0,9,8,1,2,4};
int n = sizeof(a)/sizeof(a[0]);
int i,j,t;
for(i = 0;i<n;i++)
{
for(j = 0;j<n-i-1;j++)//j<10-i
{
if(a[j] > a[j+1])
{
t = a[j];
a[j] = a[j+1];
a[j+1] = t;
}
}
}
for(i = 0;i<n;i++)
printf("%d ",a[i]);
printf("\n");
}
#endif
/* 选择排序
5 4 3 6 0 9 8 1 2 4
k
0 4 3 6 5 9 8 1 2 4
*/
#if 0
void main()
{
int a[] = {5,4,3,6,0,9,8,1,2,4};
int n = sizeof(a)/sizeof(a[0]);
int i,j,k,t;
for(i = 0;i<n;i++)
{
k = i;
for(j = i+1;j<n;j++)
{
if(a[k] > a[j])
k = j;
}
if(k != i) //
{
t = a[k];
a[k] = a[i];
a[i] = t;
}
}
}
#endif
#if 0
void CreateHeap(int a[],int root,int len)
{
int i,t = a[root];
i = 2 * root; //左孩子下标
while(i <= len)
{
if(i < len) //有两个孩子
{
if(a[i] < a[i+1])
i++;
}
if(t >= a[i])
break;
else
{
a[i/2] = a[i]; //把较大的放在父亲位置
i = 2 * i;
}
}
a[i/2] = t;
}
void Sort(int a[],int len)
{
int i,t;
for(i = len/2;i>=1;i--) //第一次创建从中间节点开始
CreateHeap(a,i,len);//这一行代码已经把初始的大根堆建好了
for(i = len;i>=1;i--)
{
t = a[1];
a[1] = a[i];
a[i] = t;
CreateHeap(a,1,i-1);
}
}
void main()
{
int a[] = {0,8,7,9,0,12,3,4,5,6,76,87,89};
int n = sizeof(a)/sizeof(a[0]) - 1;
Sort(a,n);
for(int i = 1;i<=n;i++)
printf("%d ",a[i]);
printf("\n");
}
#endif
#include<math.h>
#if 0
void main()
{
int n;
int j;
int k ;
for(n = 1;n <= 100;n++)
{
k = sqrt((double)n);
for(j = 2;j<=k;j++)
{
if(n % j == 0)
break;
}
if(j > k)
printf("%d ",n);
}
}
#endif
//筛选法
#if 0
void main()
{
int a[101];
int i,j;
for(i = 1;i<101;i++)
a[i] = i;
for(i = 2;i<=10;i++)
{
for(j = i+1;j<101;j++)
{
if(a[j] != 0&&a[j] % i == 0)
a[j] = 0;
}
}
for(i = 1;i<101;i++)
{
if(a[i] != 0)
printf("%d ",a[i]);
}
printf("\n");
}
#endif