/*
1> 冒泡法排序 方法1
不考虑去除重复数的情况下:
*第几大数,由第一个for循环的条件变量k决定
2> 如果只找第二大数的话,方法2简单
3>去除重复数的情况下:
找第二大数,有重复数不算在第几大数内 方法3
*/
int main(void)
{
int num[] = { 1, 7, 2, 5, 6, 8 };
int i, j, tmp;
int k;
k = sizeof(num)/(sizeof(num[0]));
/* test1 */
int i, j, tmp;
int k;
k = sizeof(num)/(sizeof(num[0]);
for (i = 0; i < k; i++) //k为第几大数的坐标,如果找第3大数,k设为3结束,后面不需要找了。
{
for (j = i+1; j < k; j++)
{
if (num[i] < num[j])
{
tmp = num[i];
num[i] = num[j];
num[j] = tmp;
}
}
}
for (i = 0; i < k; i++)
{
printf("%d ", num[i]);
}
#if 0
/* test2 */
int num[] = { 1, 2, 8, 5, 6, 7 };
int i, j, tmp;
int k;
k = sizeof(num)/(sizeof(num[0]));
for (i = 1; i < k; i++)
{
if (j < num[i])
{
tmp = j; //tmp保存第二大数
j = num[i];
}
}
printf("%d\n", tmp);
#endif
#if 0
/* test3 */
int num[] = { 1, 6, 2, 8, 5, 8, 7, 6, 8, 6 };
int i, j, k, h;
k = 1, s = 1, h = 1, m = 1;
int x, y, z, c;
x = 0, y = 0, z = 0, c = 0;
j = sizeof(num)/(sizeof(num[0]));
printf("j = %d\n", j);
for (i = 0; i < j; i++)
{
if (x == num[i])
{
k = 0;
continue;
}
if (x < num[i])
{
c = z;
z = y;
y = x;
x = num[i];
}
else if (y == num[i])
{
s = 0;
continue;
}
else if(y < num[i])
{
c = z;
z = y;
y = num[i];
}
else if (z == num[i])
{
h = 0;
continue;
}
else if (z < num[i])
{
c = z;
z = num[i];
}
else if (c == num[i])
{
m = 0;
continue;
}
else if (c < num[i])
{
c = num[i];
}
}
if (!(k == 0))
{
printf("%d ", x);
}
if (s != 0)
{
printf("%d ", y);
}
if (!(h == 0)
{
printf("%d ", z);
}
if (m != 0)
{
printf("%d ", c);
}
}
#endif
return 0;
}
阅读(479) | 评论(0) | 转发(0) |