Java & Kotlin

[Java] List ์ •๋ ฌ์— ๋Œ€ํ•˜์—ฌ.

์žํ๋‹ˆ 2022. 3. 6. 22:22

0.๐Ÿšถ๋“ค์–ด๊ฐ€๋ฉฐ

์ž๋ฐ”์—์„œ List๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ฐพ์•„๋ณด๋‹ค๊ฐ€ ์ถ”๊ฐ€์ ์ธ ๋ช‡๋ช‡ ๊ฐœ๋…๋“ค์„ ์‚ดํŽด๋ณด๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

List๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•, Comparable๊ณผ Comparator ์ธํ„ฐํŽ˜์ด์Šค์— ๋Œ€ํ•ด ๊ธ€์„ ์จ๋ณด๊ณ  ์ž๋ฐ” List ์ •๋ ฌ ๋ฐฉ์‹์ธ tim sort์— ๋Œ€ํ•ด ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ์ž˜ ์ •๋ฆฌ๋œ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์†Œ๊ฐœํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1.๐Ÿ“šList๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•

์ž๋ฐ”์˜ List๋ฅผ ์ •๋ ฌํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

1) Collections ํด๋ž˜์Šค์˜ static ๋ฉ”์„œ๋“œ์ธ sort()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋จผ์ € ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

public class SortingDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hello world");
        list.add("abcd");
        list.add("Kim");
        list.add("java");

        System.out.println("์ •๋ ฌ ์ „ ๋ฐฐ์—ด : " + list);
        Collections.sort(list);
        System.out.println("์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : " + list);
    }
}

# result

์ •๋ ฌ ์ „ ๋ฐฐ์—ด : [hello world, abcd, Kim, java]
์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : [Kim, abcd, hello world, java]

์œ„ ์ฝ”๋“œ 10๋ฒˆ ๋ผ์ธ์„ ์‚ดํŽด๋ณด์‹œ๋ฉด Collections ํด๋ž˜์Šค์˜ static ๋ฉ”์„œ๋“œ์ธ sort๋ฅผ ์‚ฌ์šฉํ–ˆ๊ณ  ์ธ์ž๋กœ๋Š” list๋ฅผ ๋„˜๊ฒจ์ค€ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๊ฒฐ๊ณผ๋Š” ์ž๋ฐ”์˜ String ์ •๋ ฌ ๋ฐฉ์‹์ธ ๋Œ€๋ฌธ์ž ์šฐ์„ , ์•ŒํŒŒ๋ฒณ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋”ฐ๋ผ ์ž˜ ์ •๋ ฌ๋˜์—ˆ๋„ค์š”!

 

๊ทธ๋Ÿฐ๋ฐ ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ด…์‹œ๋‹ค. ์•„๋ž˜ ์‚ฌ์ง„์€ Collections ํด๋ž˜์Šค์˜ sort ๋ฉ”์„œ๋“œ ์ค‘ List ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

Collections ํด๋ž˜์Šค์˜ sort ๋‚ด๋ถ€ ์ฝ”๋“œ

Collections ํด๋ž˜์Šค์˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด๋„ List ์ธํ„ฐํŽ˜์ด์Šค์˜ sort ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋„ค์š”. ์‚ฌ์‹ค์ƒ ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•๊ณผ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ์ด์šฉํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ๋‘ ๋ฒˆ์งธ ๋ฐฉ๋ฒ•์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ฃ .

 

2) List ์ธํ„ฐํŽ˜์ด์Šค์˜ default ๋ฉ”์„œ๋“œ์ธ sort()๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•

์‚ฌ์šฉ ๋ฐฉ๋ฒ•์„ ๋จผ์ € ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

public class SortingDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hello world");
        list.add("abcd");
        list.add("Kim");
        list.add("java");
        
        System.out.println("์ •๋ ฌ ์ „ ๋ฐฐ์—ด : " + list);
        list.sort(null);
        System.out.println("์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : " + list);
    }
}

# result

์ •๋ ฌ ์ „ ๋ฐฐ์—ด : [hello world, abcd, Kim, java]
์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : [Kim, abcd, hello world, java]

์ฒซ ๋ฒˆ์งธ ๋ฐฉ์‹๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๊ณ  ์ •๋ ฌ๋„ ์ž˜๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋‹น์—ฐํ•œ ์ด์•ผ๊ธฐ๊ฒ ์ฃ ? ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ๋ถˆ๋ €์œผ๋‹ˆ๊นŒ์š”! ์ด๋•Œ sort๋ฉ”์„œ๋“œ์— null์„ ์ธ์ž๋กœ ๋„˜๊ฒผ์Šต๋‹ˆ๋‹ค. ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์กฐ๊ธˆ ๋” ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์œ„ ์‚ฌ์ง„์€ list ์ธํ„ฐํŽ˜์ด์Šค์˜ default ๋ฉ”์„œ๋“œ sort ๋‚ด๋ถ€ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์ธ์ž๋กœ Comparator ๊ฐ์ฒด๋ฅผ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋„ค์š”! ์ œ ์ฝ”๋“œ์—์„œ๋Š” ํ•ด๋‹น ๋งค๊ฐœ ๋ณ€์ˆ˜ ์ž๋ฆฌ์— null์„ ์ธ์ž๋กœ ๋„˜๊ฒจ์ค€ ๊ฒƒ์ด๊ณ ์š”. ๋˜ํ•œ ์ฝ”๋“œ๋ฅผ ํ•œ ์ค„์”ฉ ์‚ดํŽด๋ณด๋ฉด Object ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•œ ๋’ค Arrays.sort ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

ํ˜ธ์ถœํ•œ Arrays.sort ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•Œ๊ธฐ ์œ„ํ•ด ํƒ€๊ณ  ๋“ค์–ด๊ฐ€ ๋ด…์‹œ๋‹ค!

Arrays ํด๋ž˜์Šค์˜ sort ๋ฉ”์„œ๋“œ

์œ„ ์‚ฌ์ง„์€ Arrays ํด๋ž˜์Šค์˜ sort ๋ฉ”์„œ๋“œ์ž…๋‹ˆ๋‹ค. ์กฐ๊ฑด๋ฌธ์„ ๋ณด์‹œ๋ฉด ์ •๋ ฌ์—๋Š” LegacyMergeSort๋‚˜ TimSort๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. LegacyMergeSort์˜ ๊ฒฝ์šฐ API๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์ถ”ํ›„ ์ œ๊ฑฐ๋  ์˜ˆ์ •์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ผญ LegacyMergeSort ๋ฐฉ์‹์œผ๋กœ ํ•ด์ฃผ์„ธ์š”๋ผ๊ณ  ์‚ฌ์šฉ์ž๊ฐ€ ์š”๊ตฌํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด TimSort ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. TimSort ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ๋Š” ์ž˜ ์ •๋ฆฌ๋œ ๊ธ€์„ ๋’ท ๋ถ€๋ถ„์— ์†Œ๊ฐœํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 


2.๐Ÿ‘ฌComparable๊ณผ Comparator ์ธํ„ฐํŽ˜์ด์Šค

์œ„์—์„œ Comparator์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค. sort ๋ฉ”์„œ๋“œ์— ๋น„๊ต ๋ฐฉ์‹์„ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฐ์ฒด์ธ๋ฐ ๋น„์Šทํ•œ ๋‚ด์šฉ์œผ๋กœ Comparable์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ๊ฐœ๋…์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์•ž์„œ ์‚ดํŽด๋ดค๋˜ ์ •๋ ฌ ์ฝ”๋“œ์—์„œ๋Š” String์„ ๋‹ด์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ์ด์— ๋‹ค์Œ ๋‘ ๊ฐ€์ง€์— ๋Œ€ํ•œ ์งˆ๋ฌธ์ด ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • String์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ค€์€ ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?
  • String์„ ๋‹ค๋ฅธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?

์ฒซ ๋ฒˆ์งธ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Comparable ์ธํ„ฐํŽ˜์ด์Šค์ด๊ณ  ๋‘ ๋ฒˆ์งธ ์งˆ๋ฌธ์— ๋‹ตํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Comparator ์ธํ„ฐํŽ˜์ด์Šค์ž…๋‹ˆ๋‹ค.

 

# Comparable

์œ„ ์‚ฌ์ง„์€ String ํด๋ž˜์Šค๊ฐ€ ๊ตฌํ˜„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์ฐพ๋˜ Comparable ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์žˆ๋„ค์š”!

 

๋˜ ํ•œ ๋ฒˆ Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋”ฐ๋ผ ๋“ค์–ด๊ฐ€ ๋ด…์‹œ๋‹ค.

public interface Comparable<T> {
    /*
   	 ๋งŽ์€ ๋‚ด์šฉ์˜ ์ฃผ์„...
    */
    public int compareTo(T o);
}

์œ„ ์ฝ”๋“œ๋Š” Comparable ์ธํ„ฐํŽ˜์ด์Šค์˜ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. compareTo๋ผ๋Š” ๋ฉ”์„œ๋“œ๋งŒ์„ ๊ตฌํ˜„ํ•˜๋ฉด Comparable ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด์ฃ .

String ํด๋ž˜์Šค์˜ compareTo ๊ตฌํ˜„ ๋ถ€๋ถ„

์œ„ ์‚ฌ์ง„์€ String ํด๋ž˜์Šค์˜ compareTo ๋ฉ”์„œ๋“œ ๊ตฌํ˜„ ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ์ •๋ ฌ์„ ์œ„ํ•ด์„œ๋Š” ๋น„๊ต ๋Œ€์ƒ๊ณผ์˜ ๋Œ€์†Œ ๊ด€๊ณ„ ๊ธฐ์ค€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ์ค€์ด ์žˆ์–ด์•ผ "์ •๋ ฌ"์ด๋ผ๋Š” ํ–‰์œ„๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด์ฃ . ์ด๋Ÿฌํ•œ ๊ธฐ์ค€์„ compareTo ๋ฉ”์„œ๋“œ์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. "์ž์‹ "๊ณผ "๋น„๊ต ๋Œ€์ƒ ๊ฐ์ฒด"๋ฅผ ์ ์ ˆํ•œ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ตํ•œ ๋’ค ๊ทธ ๊ฒฐ๊ณผ ๊ฐ’์„ ์–‘์ˆ˜, 0, ์Œ์ˆ˜๋กœ ๋ฆฌํ„ดํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

 

์‹ค์ œ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ์˜ ๋‚ด๋ถ€๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ฐ์ฒด๋ผ๋ฆฌ์˜ ๋Œ€์†Œ ๊ด€๊ณ„๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ๊ฐ์ฒด์— ๊ตฌํ˜„๋˜์–ด ์žˆ๋Š” compareTo ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค.

# Comparator

์ด์ œ ๋น„์Šทํ•œ ๊ฐœ๋…์ด๋ผ๊ณ  ์†Œ๊ฐœํ–ˆ๋˜ Comparator๋ฅผ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Comparable์— ๋Œ€ํ•ด ์•Œ์•˜๊ณ  ์ด๋ฅผ ํ†ตํ•ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด Comparator๋Š” ์™œ ํ•„์š”ํ•œ ๊ฒƒ์ผ๊นŒ์š”?

 

Comparator๋Š” ์œ„์—์„œ ์‚ดํŽด๋ณด์•˜๋˜ ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ ์ค‘ ๋‘ ๋ฒˆ์งธ, "๋‹ค๋ฅธ ๊ธฐ์ค€"์œผ๋กœ ์ •๋ ฌํ•˜๊ณ  ์‹ถ์€ ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ์„  Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ดํŽด๋ณด๋„๋ก ํ•ฉ์‹œ๋‹ค.

public interface Comparator<T> {
    int compare(T o1, T o2);
    
    /*
     ์ฝ”๋“œ์™€ ์ฃผ์„๋“ค,,
    */
}

Comparator๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” compare ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์—ญ์‹œ Comparable๊ณผ ๋ฉ”์ปค๋‹ˆ์ฆ˜๊ณผ ๋™์ผํ•˜๋‚˜, ์ธ์ž๋กœ ๊ฐ์ฒด ๋‘ ๊ฐœ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ์ฐจ์ด์ ์ž…๋‹ˆ๋‹ค. 

 

๋‘ ๊ฐ์ฒด๋ฅผ ์ ์ ˆํ•œ ๊ธฐ์ค€์„ ๊ฐ€์ง€๊ณ  ๋น„๊ตํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๋ฉด ๋˜๊ณ  ๋ฆฌํ„ด ๊ฐ’ ์—ญ์‹œ ๋น„๊ต ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ ์–‘์ˆ˜, 0, ์Œ์ˆ˜๋กœ ๋‚ด์–ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

 

์ด์ œ ๋‹ค์‹œ ์ฒ˜์Œ ์‚ดํŽด๋ณด์•˜๋˜ ์ •๋ ฌ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

public class SortingDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hello world");
        list.add("abcd");
        list.add("Kim");
        list.add("java");

        System.out.println("์ •๋ ฌ ์ „ ๋ฐฐ์—ด : " + list);
        list.sort(null);
        System.out.println("์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : " + list);
    }
}

# result

์ •๋ ฌ ์ „ ๋ฐฐ์—ด : [hello world, abcd, Kim, java]
์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : [Kim, abcd, hello world, java]

์œ„์™€ ๊ฐ™์€ ์ฝ”๋“œ์˜€๋Š”๋ฐ์š”. ๋ผ์ธ 10๋ฒˆ์„ ๋ณด๋ฉด null์ด๋ผ๊ณ  ๋„ฃ์–ด์ค€ ์ธ์ž ์ž๋ฆฌ๊ฐ€ ๋ฐ”๋กœ Comparator์˜ ์ž๋ฆฌ์ž…๋‹ˆ๋‹ค. null์„ ๋„ฃ์—ˆ๋‹ค๋Š” ๋œป์€ ๊ณง, String์ด ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ธฐ๋ณธ ์ •๋ ฌ ๋ฐฉ์‹ ์ฆ‰, compareTo๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ •๋ ฌํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ฌธ์ž์˜ ๊ธธ์ด๋ฅผ ์ •๋ ฌ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๊ณ  ์‹ถ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

public class SortingDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("hello world");
        list.add("abcd");
        list.add("Kim");
        list.add("java");

        System.out.println("์ •๋ ฌ ์ „ ๋ฐฐ์—ด : " + list);
        list.sort(new Comparator<String>(){
            @Override
            public int compare(String o1, String o2) {
                return o1.length() - o2.length();
            }
        });
        System.out.println("์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : " + list);
    }
}

# result

์ •๋ ฌ ์ „ ๋ฐฐ์—ด : [hello world, abcd, Kim, java]
์ •๋ ฌ ํ›„ ๋ฐฐ์—ด : [Kim, abcd, java, hello world]

์ด์ „๊ณผ ๋‹ค๋ฅธ ์ ์„ ํ™•์ธํ•˜์…จ๋‚˜์š”? list.sort ๋ฉ”์„œ๋“œ ์ธ์ž์— Comparator๋ฅผ ๊ตฌํ˜„ํ•œ ์ต๋ช… ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. compare ๋ฉ”์„œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๋ฉด์„œ ๊ธธ์ด๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋„๋ก return ๊ฐ’์„ ์„ค์ •ํ•ด์ค€ ๊ฒƒ์ด์ฃ . ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ํ†ตํ•ด sort์˜ ๊ธฐ์ค€์„ ์ปค์Šคํ…€ํ•˜์—ฌ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์•„๋ž˜ ์‚ฌ์ง„์€ sort ํ•จ์ˆ˜์— Comparator ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด์ฃผ์—ˆ์„ ๋•Œ ๋ถ€๋ฅด๋Š” ๋ฉ”์„œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์บก์ณํ•œ ์‚ฌ์ง„์ž…๋‹ˆ๋‹ค.

์ค‘๊ฐ„ if๋ฌธ์„ ๋ณด์‹œ๋ฉด c.compare ๋ฉ”์„œ๋“œ๋ฅผ ๋ถ€๋ฅด๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋Š”๋ฐ์š”. c๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ธ์ž๋กœ ๋„ฃ์–ด์ค€ Comparator ๊ฐ์ฒด์ด๊ณ  ์šฐ๋ฆฌ๊ฐ€ ์ปค์Šคํ…€ํ•ด์ค€ compare ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 


์ด๋ ‡๊ฒŒ ์ •๋ ฌ ๊ธฐ์ค€์„ ์ œ๊ณตํ•ด์ฃผ๋Š” Comparable ์ธํ„ฐํŽ˜์ด์Šค์™€ Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ดํŽด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‘ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์ฃผ์–ด ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ์ง€๋งŒ ์•ž์„œ ์‚ดํŽด๋ณด์•˜๋˜ ๋‘ ๊ฐ€์ง€ ์งˆ๋ฌธ์„ ์ž˜ ์ƒ๊ฐํ•ด๋ณด์‹œ๋ฉด ๋‘ ์ธํ„ฐํŽ˜์ด์Šค์˜ ์šฉ๋„ ์ฐจ์ด๋ฅผ ํŒŒ์•…ํ•˜์‹ค ์ˆ˜ ์žˆ์œผ์‹ค ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • String์˜ ๊ธฐ๋ณธ ์ •๋ ฌ ๊ธฐ์ค€์€ ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?
  • String์„ ๋‹ค๋ฅธ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜๋Š” ์—†์„๊นŒ?

3.๐Ÿ„Tim sort

Tim sort ๋ฐฉ์‹์€ ์ž๋ฐ”์—์„œ List๋ฅผ ์ •๋ ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” sort ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค. ํ•ด๋‹น ๋‚ด์šฉ์„ ์ œ๊ฐ€ ์ •๋ฆฌํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ž˜ ์ •๋ฆฌํ•ด์ฃผ์‹  ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ฐพ์•„ ์ด๋ฅผ ์†Œ๊ฐœํ•˜๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•˜์‹œ๋‹ค๋ฉด ์•„๋ž˜ ๋งํฌ๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ์‚ดํŽด๋ด์ฃผ์„ธ์š”!

 

์ž๋ฐ” [JAVA] - ํŒ€ ์ •๋ ฌ (Tim Sort)

[์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ชจ์Œ] ๋”๋ณด๊ธฐ 1. ๊ณ„์ˆ˜ ์ •๋ ฌ (Counting Sort) 2. ์„ ํƒ ์ •๋ ฌ (Selection Sort) 3. ์‚ฝ์ž… ์ •๋ ฌ (Insertion Sort) 4. ๊ฑฐํ’ˆ ์ •๋ ฌ (Bubble Sort) 5. ์…ธ ์ •๋ ฌ (Shell Sort) 6. ํž™ ์ •๋ ฌ (Heap Sort) 7. ํ•ฉ๋ณ‘..

st-lab.tistory.com


4. ๐Ÿ’จ๋‚˜๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์€ ์ž๋ฐ” List ์ •๋ ฌ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋‹ค๊ฐ€ ๋ฑ…๋ฑ… ๋Œ์•„์„œ ์ด๊ฒƒ์ €๊ฒƒ ์•Œ๊ฒŒ ๋˜์–ด ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. sort ๋ฉ”์„œ๋“œ์˜ ์‚ฌ์šฉ๋ฒ•๋งŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ”๋‹ค๋ฉด ์ ‘ํ•˜์ง€ ๋ชปํ–ˆ์„ ๋‚ด์šฉ๋“ค์ด์—ˆ๋˜ ๊ฒƒ ๊ฐ™์•„ ํ•œ ๋ฒˆ ๋” ์ฐพ์•„๋ณด๋Š” ์Šต๊ด€์„ ๊ฐ€์ง€์ž ๋ผ๋Š” ๋งˆ์Œ๊ฐ€์ง์„ ๋‹ค์‹œ ๋˜์ƒˆ๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ณ„๊ธฐ๊ฐ€ ๋œ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.  

 

๊ธด ๊ธ€ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

 

๋ฐ˜์‘ํ˜•