C语言学习记录(2)数组学习:冒泡序列
程序员文章站
2022-07-15 08:46:35
...
Searching and sorting
问题1:
如何在一个筛选过的数组中找到所需要的数的位置呢?
方法一:直接筛选法
void search_index(int tab[], int taille, int key)
{
int I;
for(I = 0; I < taille ; I++)
{
if(tab[I] == key)
return I;
}
return -1;
}
方法二:二分法
void search_index2(int tab[], int taille, int key)
{
int I = 0;
int li = 0;
int ri = taille -1;
//left index;right index
int mid =(li + ri)/2;
while(li < ri)
{
if(tab[I] == key)
{
return I;
}
else if(tab[I] > key)
{
ri--;
}
else
{
li++;
}
}
return -1;
}
方法三: 递归二分法
问题2:
如何将一个数组按由小到大的规律排列?
void comparer(int tab[], int taille)
{
int a = 0;
int i;
int j = 0;
int ta = 0;
while(ta<=taille-1)
{
for (i = 0;i < taille -1;i++ )
{
if (tab[i] > tab[i+1])
{
a = tab[i];
tab[i] = tab[i+1];
tab[i+1] = a;
}
}
ta++;
}
}
void tire(int tab[],int taille)
{
int limite = tab[0];
int i,j,k;
int tab1[taille];
int tab2[taille];
int indice_1 = 0;
int indice_2 = 0;
int m = 0;
int n = 0;
tab1[0]=tab[0];
indice_1=indice_1+1;
for(i = 1;i < taille; i++)
{
if( tab[i] >= tab[0])
{
tab1[indice_1] = tab[i];
indice_1++;
}
else if( tab[i] < tab[0])
{
tab2[indice_2] = tab[i];
indice_2++;
}
}
comparer(tab1 ,indice_1);
comparer(tab2 ,indice_2);
for(j = 0; j<taille;j++)
{
if (j <= (taille - indice_2-1))
{
tab[j] = tab2[m];
m++;
}
else
{
tab[j] = tab1[n];
n++;
}
printf("%d\t",tab[j]);
}
}
上一篇: C语言学习【9】——共用体
下一篇: C语言学习笔记9