Tìm số lớn thứ 2 trong mảng 1 chiều code C/C++

 

#include <stdio.h>

/*

    Tìm số lớn thứ 2 ở trong mảng

*/

#define MAX_SIZE 100 // sức chứa tối đa

 

void

NhapMang

(

int

arr

[

]

,

int

n

)

{

    

for

(

int

i

=

0

;

i

<

n

;

i

++

)

{

        

printf

(

“Nhap arr[%d] = “

,

i

)

;

        

scanf

(

“%d”

,

&arr[i]);

    

}

}

 

void

XuatMang

(

int

arr

[

]

,

int

n

)

{

    

for

(

int

i

=

0

;

i

<

n

;

i

++

)

{

        

printf

(

“\narr[%d] = %d”

,

i

,

arr

[

i

]

)

;

    

}

}

 

/*

    C1. Sắp xếp mảng giảm dần => Số lớn thứ 2 là arr[1]

    C2. Tìm đồng thời số lớn nhất và số lớn thứ 2

*/

/*————————-*/

/*

    C1.

*/

void

swap

(

int

&a, int &b){

    int tg = a;

    

a

=

b

;

    

b

=

tg

;

}

 

void

SapXep

(

int

a

[

]

,

int

n

)

{

    

for

(

int

i

=

0

;

i

<

n

;

i

++

)

{

        

for

(

int

j

=

i

+

1

;

j

<

n

;

j

++

)

{

            

if

(

a

[

i

]

<

a

[

j

]

)

{

                

swap

(

a

[

i

]

,

a

[

j

]

)

;

            

}

        

}

        

    

}

}

 

int

FindBySort

(

int

a

[

]

,

int

n

)

{

    

SapXep

(

a

,

n

)

;

    

return

a

[

1

]

;

}

 

/*————————-*/

/*

    C2.

    – Nếu có 1 số >= firstMax:

        secondMax = firstMax;

        firstMax = số lớn nhất mới tìm được

    – Nếu có 1 số chỉ > secondMax:

        secondMax = số lớn hơn mới tìm được

*/

int

FindByLoop

(

int

a

[

]

,

int

n

)

{

    

int

firstMax

,

secondMax

;

    

if

(

a

[

0

]

>

a

[

1

]

)

{

        

firstMax

=

a

[

0

]

;

        

secondMax

=

a

[

1

]

;

    

}

else

{

        

firstMax

=

a

[

1

]

;

        

secondMax

=

a

[

0

]

;

    

}

    

for

(

int

i

=

2

;

i

<

n

;

i

++

)

{

        

if

(

a

[

i

]

>

=

firstMax

)

{

            

secondMax

=

firstMax

;

            

firstMax

=

a

[

i

]

;

        

}

else

if

(

a

[

i

]

>

secondMax

)

{

            

secondMax

=

a

[

i

]

;

        

}

    

}

    

return

secondMax

;

}

 

 

int

main

(

)

{

    

int

arr

[

MAX_SIZE

]

;

 

    

int

n

;

// số lượng phần tử của mảng

    

// Kiểm tra số lượng phần tử là số dương + nhỏ hơn MAX_SIZE

    

do

{

        

printf

(

“Nhap n = “

)

;

        

scanf

(

“%d”

,

&n);

    

}

while

(

n

<

=

1

|

|

n

>

MAX_SIZE

)

;

 

    

// Nhập mảng

    

NhapMang

(

arr

,

n

)

;

 

    

// Xuất mảng

    

XuatMang

(

arr

,

n

)

;

 

    

printf

(

“\nSo lon thu 2 la %d”

,

FindBySort

(

arr

,

n

)

)

;

    

printf

(

“\nSo lon thu 2 la %d”

,

FindByLoop

(

arr

,

n

)

)

;

}