๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿค– data structures & algorithms

Data Structures & Algorithms with Javascript : Sorting Algorithms (Basic)

2024.07.26 - [๐Ÿชฒ debug] - Data Structures & Algorithms with Javascript : Graphs and Graph Algorithms

 

Data Structures & Algorithms with Javascript : Graphs and Graph Algorithms

2024.07.25 - [๐Ÿค– data structures & algorithms] - Data Structures & Algorithms with Javascript : Binary Trees and Binary Search Trees Data Structures & Algorithms with Javascript : Binary Trees and Binary Search Trees2024.07.24 - [๐Ÿค– data structures &

pyotato-dev.tistory.com

๋ฐ์ดํ„ฐ ์—ฐ์‚ฐ ์ค‘ ๊ฐ€์žฅ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ์ •๋ ฌ์ด๋ž‘ ๊ฒ€์ƒ‰์ด๋‹ค.
์ด๋ฒˆ ์žฅ์—์„œ๋Š” ๋ฐฐ์—ด ๊ธฐ๋ณธ/ ์‹ฌํ™” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์„ ์‚ดํŽด๋ณด์ž. 

- ๊ธฐ๋ณธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค : Bubble sort, Selection sort, Insertion sort
- ์‹ฌํ™” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค : shellsort, mergesort, quicksort algorithm


โ€ผ ์˜ˆ์ œ๋Š” ์ฑ…์˜ ๊ตฌํ˜„์„ ์ฐธ๊ณ ํ•˜์—ฌ ํด๋ž˜์Šค๋กœ ์žฌ๊ตฌ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค!!

๋น„๊ต๋ฅผ ์œ„ํ•œ ์ปค์Šคํ…€ Array ํด๋ž˜์Šค

๊ฐ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋“ค์„ ๋น„๊ตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ๊ธฐ๋ณธ ์ปค์Šคํ…€ Array ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

์ด๋ฏธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” Array๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํด๋ž˜์Šค ์ด๋ฆ„์„ CustomArray๋กœ ํ–ˆ๋‹ค.

Array์˜ ๊ธฐ๋ณธ ์—ฐ์‚ฐ์ธ ์‚ฝ์ž…, ์‚ญ์ œ์™€ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐฐ์—ด ์š”์†Œ ๊ตํ™˜, ์ถœ๋ ฅ์„ ์œ„ํ•œ ํฌ๋งคํŒ… ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•ด ๋ณด์ž.

class CustomArray{
	constructor(numElements){
    	this.dataStore = [];
        this.pos = 0;
        this.numElements = numElements;
        
        for (let i = 0; i < numElements; ++i) { 
        	this.dataStore[i] = i;
		}
    }
    
    // ์‚ฝ์ž…
    insert(element){
    	this.dataStore[this.pos++] = element;
    }

	// ์ถœ๋ ฅ ํฌ๋ฉงํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ํ—ฌํผํ•จ์ˆ˜
    toString(){
    	let retstr = "";
		for (let i = 0; i < this.dataStore.length; ++i) {
			retstr += this.dataStore[i] + " "; 
            if (i > 0 && i % 10 == 0) {
         		retstr += "\n";
      		}
		}
		return retstr;
    }
    
    // ์ œ๊ฑฐ
    clear(){
    	for (let i = 0; i < this.dataStore.length; ++i) {
			this.dataStore[i] = 0; 
        }
    }
    
    // ๋žœ๋ค ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    setData(){
    	for (let i = 0; i < this.numElements; ++i) {
			this.dataStore[i] = Math.floor(Math.random() * (this.numElements+1));
		}
    }
    
    // index1 ๊ณผ index2์˜ ์ž๋ฆฌ ๋ณ€๊ฒฝ
    swap(arr, index1, index2){
    	let temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }
}

const print = item => console.log(item);

let numElements = 100;
let myNums = new CustomArray(numElements);
myNums.setData();
print(myNums.toString());

/**

51 57 18 32 12 28 91 77 57 94 94 87 
71 76 57 44 37 14 12 3 88 47 
68 70 65 65 85 20 55 36 15 94 
52 79 98 40 42 81 16 0 56 66 
84 62 6 67 74 34 16 15 80 90 
26 88 0 8 49 30 70 47 62 47 
69 51 27 97 99 40 41 57 22 2 
47 86 32 6 88 43 36 52 64 59 
72 46 50 94 75 40 27 25 12 9 
42 25 52 10 24 63 26 62 88 

*/

๊ธฐ๋ณธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Bubble Sort

๋ฒ„๋ธ” ์ •๋ ฌ์€ ๊ฐ€์žฅ ๋А๋ฆฐ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ํ•˜๋‚˜์ง€๋งŒ ๊ทธ๋งŒํผ ๊ตฌํ˜„ํ•˜๊ธฐ๋„ ์‰ฌ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.

 

 

๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•  ๋•Œ ๋งˆ์น˜ ๊ฑฐํ’ˆ์ด ํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์ ๋ฆฌ๋Š” ๋ชจ์–‘๊ณผ ๋น„์Šทํ•ด์„œ ๋ฒ„๋ธ” ์ •๋ ฌ์ด๋ผ๊ณ  ํ•œ๋‹ค.

์œ„์˜ ์ด๋ฏธ์ง€๋Š” ๋ฒ„๋ธ” ์ •๋ ฌ์„ ํ•˜๋Š” ์ฒซ ๋‹จ๊ณ„๋“ค์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ๋‹ค.

์ด๋ฒˆ์—๋Š” ์•ŒํŒŒ๋ฒณ๋“ค์„ ์†Œ๋ฌธ์ž๋ถ€ํ„ฐ ์ •๋ ฌํ•˜๋Š” ์˜ˆ๋ฅผ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด์ž.

์‹œ์ž‘ : E A B D H
์ •๋ ฌ : A E B D H (A์™€ E ์ž๋ฆฌ ๋ฐ”๊ฟ”์ฃผ๊ธฐ)
์ •๋ ฌ : A B E D H (B์™€ E ์ž๋ฆฌ ๋ฐ”๊ฟ”์ฃผ๊ธฐ)
์ •๋ ฌ : A B D E H (D์™€ E ์ž๋ฆฌ ๋ฐ”๊ฟ”์ฃผ๊ธฐ)

 

์ˆซ์ž๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด์ž.

์ž‘์€ ๊ฐ’๋“ค์€ ์™ผ์ชฝ์œผ๋กœ ๋ชฐ๋ฆฌ๊ณ  ํฐ ๊ฐ’๋“ค์€ ๋‹ค ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ชฐ๋ฆฐ๋‹ค.

72 54 59 30 31 78 2 77 82 72 (์ •๋ ฌ ์‹œ์ž‘!)
72 54 59 30 31 78 2 77 72 82 
72 54 59 30 31 78 2 72 77 82 
72 54 59 30 31 78 77 82 72
72 54 59 30 2 31 78 77 82 72
72 54 59 2 30 31 78 72 77 82 
72 54 2 59 30 31 78 72 77 82 
72 2 54 59 30 31 78 72 77 82 
2 72 54 59 30 31 78 72 77 82 
2 72 54 59 30 31 72 78 77 82 
2 72 54 59 30 31 72 77 78 82 
2 72 54 30 59 31 72 77 78 82 
2 72 54 30 31 59 72 77 78 82 
2 72 30 54 31 59 72 77 78 82
2 72 30 31 54 59 72 77 78 82 
2 30 72 31 54 59 72 77 78 82 
2 30 31 72 54 59 72 77 78 82 
2 30 31 54 72 59 72 77 78 82 
2 30 31 54 59 72 72 77 78 82 (์ •๋ ฌ ์™„๋ฃŒ!)

๊ตฌํ˜„

์œ„์˜ ์˜ˆ์‹œ์—์„œ ์‚ดํŽด๋ดค๋“ฏ์ด ๋ฒ„๋ธ” ์ •๋ ฌ์€ ์ž‘์€ ๊ฐ’์„ ์™ผ์ชฝ์œผ๋กœ ๋ชจ๋‘ ๋ชฐ์•„๋„ฃ์œผ๋ฉด ๋œ๋‹ค.

์ž‘์€ ๊ฐ’์ด ์™ผ์ชฝ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘์œผ๋ฉด ๋‘˜์˜ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฑธ ๋ฐ˜๋ณตํ•˜๊ณ , ๋” ์ด์ƒ ๋ฐ”๊ฟ”์ค„ ๊ฐ’๋“ค์ด ์—†๋‹ค๋ฉด ์ •๋ ฌ์„ ๋งˆ์น  ์ˆ˜ ์žˆ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์ด outer ๋ฃจํ”„์—์„œ๋Š” ํ˜„์žฌ ๊ฐ’๋ถ€ํ„ฐ ๋น„๊ตํ•  ๊ฐ’๋“ค์ด ์žˆ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ด์„œ ๊ฒ€์ƒ‰ํ•œ๋‹ค.

inner ๋ฃจํ”„์—์„œ๋Š” ๋ฐฐ์—ด์˜ ์ฒซ ์š”์†Œ๋ถ€ํ„ฐ ํ˜„์žฌ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ,  ๋น„๊ต๊ฐ’์ด ๋” ํฌ๋‹ค๋ฉด ํ˜„์žฌ๊ฐ’๊ณผ ์ž๋ฆฌ๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค.

bubbleSort(){
    let numElements = this.dataStore.length;
    let temp;
    for(let outer = numElements; outer >=2; --outer){
        for(let inner = 0; inner <= outer-1; ++inner){
            if(this.dataStore[inner] > this.dataStore[inner+1]){
                this.swap(this.dataStore, inner, inner+1);
            }
        }
    }
}

 

๐Ÿ‘‡ ์ „์ฒด ์ฝ”๋“œ

๋”๋ณด๊ธฐ
class CustomArray{
	constructor(numElements){
    	this.dataStore = [];
        this.pos = 0;
        this.numElements = numElements;
        
        for (let i = 0; i < numElements; ++i) { 
        	this.dataStore[i] = i;
		}
    }
    
    // ์‚ฝ์ž…
    insert(element){
    	this.dataStore[this.pos++] = element;
    }

	// ์ถœ๋ ฅ ํฌ๋ฉงํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ํ—ฌํผํ•จ์ˆ˜
    toString(){
    	let retstr = "";
		for (let i = 0; i < this.dataStore.length; ++i) {
			retstr += this.dataStore[i] + " "; 
            if (i > 0 && i % 10 == 0) {
         		retstr += "\n";
      		}
		}
		return retstr;
    }
    
    // ์ œ๊ฑฐ
    clear(){
    	for (let i = 0; i < this.dataStore.length; ++i) {
			this.dataStore[i] = 0; 
        }
    }
    
    // ๋žœ๋ค ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    setData(){
    	for (let i = 0; i < this.numElements; ++i) {
			this.dataStore[i] = Math.floor(Math.random() * (this.numElements+1));
		}
    }
    
    // index1 ๊ณผ index2์˜ ์ž๋ฆฌ ๋ณ€๊ฒฝ
    swap(arr, index1, index2){
    	let temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }
    
    /////////////////////////// ๐Ÿ’– ์ถ”๊ฐ€ /////////////////////////// 
    bubbleSort(){
    	let numElements = this.dataStore.length;
        let temp;
        for(let outer = numElements; outer >=2; --outer){
        	for(let inner = 0; inner <= outer-1; ++inner){
            	if(this.dataStore[inner] > this.dataStore[inner+1]){
                	this.swap(this.dataStore, inner, inner+1);
                }
            }
        }
    
    }
    /////////////////////////// ๐Ÿ’– ์ถ”๊ฐ€ ///////////////////////////
}

const print = item => console.log(item);

let numElements = 10;
let myNums = new CustomArray(numElements);
myNums.setData();
print(myNums.toString());
myNums.bubbleSort();
print('์ •๋ ฌ ํ›„:');
print(myNums.toString());

/**
2 2 5 8 5 10 2 1 1 10 
์ •๋ ฌ ํ›„:
1 1 2 2 2 5 5 8 10 10 
*/

Selection Sort

์„ ํƒ ์ •๋ ฌ์€ ๋ฐฐ์—ด์˜ ์ฒ˜์Œ์—์„œ ์‹œ์ž‘ํ•ด์„œ ์ฒซ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋‚˜๋จธ์ง€ ์—˜๋ฆฌ๋จผํŠธ๋“ค๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ ์ •๋ ฌ์„ ํ•œ๋‹ค.

๋ชจ๋“  ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ดํŽด๋ณด๋ฉด ๊ฐ€์žฅ ์ž‘์€ ์—˜๋ฆฌ๋จผํŠธ๊ฐ€ ๋ฐฐ์—ด์˜ ๋งจ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚ค๊ณ ,

์ด์ œ ๋‘ ๋ฒˆ์งธ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋‚จ์€ ์—˜๋ฆฌ๋จผํŠธ๋“ค๊ณผ ๋น„๊ตํ•˜๋ฉด์„œ ๋‘ ๋ฒˆ์งธ๋กœ ์ž‘์€ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ๋ฐฐ์—ด์˜ ๋งจ ์•ž์—์„œ ๋‘ ๋ฒˆ์งธ์— ์ด๋™์‹œํ‚จ๋‹ค.

๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์‚ดํŽด๋ณผ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜์—ฌ ์ •๋ ฌ์„ ์™„์„ฑํ•œ๋‹ค.

 

์•ŒํŒŒ๋ฒณ๋“ค์ด ์„ ํƒ ์ •๋ ฌ์ด ๋˜๋Š” ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

์‹œ์ž‘: E A D H B (์•ŒํŒŒ๋ฒณ ์ˆœ์„œ A๋ฅผ ๋ฐฐ์—ด ๋งจ ์•ž์œผ๋กœ)
์ •๋ ฌ: A E D H B (๋‘ ๋ฒˆ์งธ ์ˆœ์„œ B๋ฅผ ๋ฐฐ์—ด ๋‘ ๋ฒˆ์งธ ์š”์†Œ๋กœ)
์ •๋ ฌ: A B D H E (๋„ค ๋ฒˆ์งธ ์ˆœ์„œ D๋ฅผ ๋ฐฐ์—ด ์„ธ ๋ฒˆ์งธ ์š”์†Œ๋กœ)
์ •๋ ฌ: A B D E H (๋‹ค์„ฏ ๋ฒˆ์ฉจ ์ˆœ์„œ E๋ฅผ ๋ฐฐ์—ด ๋„ค ๋ฒˆ์งธ ์š”์†Œ๋กœ)

 

์ด๋ฒˆ์—๋Š” ์ˆซ์ž๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์„ ํƒ ์ •๋ ฌํ•˜๋Š” ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด์ž.

72 54 59 30 31 78 2 77 82 72 (์ •๋ ฌ ์‹œ์ž‘!)
2 72 54 59 30 31 78 77 82 72
2 30 72 54 59 31 78 77 82 72
2 30 31 72 54 59 78 77 82 72
2 30 31 54 72 59 78 77 82 72
2 30 31 54 59 72 78 77 82 72
2 30 31 54 59 72 72 78 77 82
2 30 31 54 59 72 72 77 78 82
2 30 31 54 59 72 72 77 78 82 (์ •๋ ฌ ์™„๋ฃŒ!)

๊ตฌํ˜„

์œ„์—์„œ ์‚ดํŽด๋ณด๋ฉด ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ๋งจ ์•ž์—์„œ๋ถ€ํ„ฐ ๊ฐ€์žฅ ๋‚ฎ์€ ์ˆซ์ž๋ฅผ ๋งจ ์•ž์œผ๋กœ ์ด๋™์‹œํ‚ค๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

๊ตฌํ˜„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•  ์ˆ˜ ์žˆ๋‹ค.

๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ํ•˜๊ณ  ๊ทธ๋‹ค์Œ ์š”์†Œ๊ฐ€ ํ˜„์žฌ ์š”์†Œ๋ณด๋‹ค ์ž‘๋‹ค๋ฉด ์ตœ์†Ÿ๊ฐ’์œผ๋กœ ์„ค์ •ํ•˜๊ณ , ์ด ๋‘˜์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๋œ๋‹ค.

selectionSort(){
    let min,temp;
    for(let outer = 0; outer <= this.dataStore.length-2; ++outer){
        min = outer;
        for(let inner = outer+1; inner <= this.dataStore.length-1; ++inner){
            if(this.dataStore[inner] < this.dataStore[min]){
               min = inner;
            }
            this.swap(this.dataStore, outer, min);
        }
    }
}

 

๐Ÿ‘‡ ์ „์ฒด ์ฝ”๋“œ

๋”๋ณด๊ธฐ
class CustomArray{
	constructor(numElements){
    	this.dataStore = [];
        this.pos = 0;
        this.numElements = numElements;
        
        for (let i = 0; i < numElements; ++i) { 
        	this.dataStore[i] = i;
		}
    }
    
    // ์‚ฝ์ž…
    insert(element){
    	this.dataStore[this.pos++] = element;
    }

	// ์ถœ๋ ฅ ํฌ๋ฉงํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ํ—ฌํผํ•จ์ˆ˜
    toString(){
    	let retstr = "";
		for (let i = 0; i < this.dataStore.length; ++i) {
			retstr += this.dataStore[i] + " "; 
            if (i > 0 && i % 10 == 0) {
         		retstr += "\n";
      		}
		}
		return retstr;
    }
    
    // ์ œ๊ฑฐ
    clear(){
    	for (let i = 0; i < this.dataStore.length; ++i) {
			this.dataStore[i] = 0; 
        }
    }
    
    // ๋žœ๋ค ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    setData(){
    	for (let i = 0; i < this.numElements; ++i) {
			this.dataStore[i] = Math.floor(Math.random() * (this.numElements+1));
		}
    }
    
    // index1 ๊ณผ index2์˜ ์ž๋ฆฌ ๋ณ€๊ฒฝ
    swap(arr, index1, index2){
    	let temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }
    
  
    bubbleSort(){
    	let numElements = this.dataStore.length;
        let temp;
        for(let outer = numElements; outer >=2; --outer){
        	for(let inner = 0; inner <= outer-1; ++inner){
            	if(this.dataStore[inner] > this.dataStore[inner+1]){
                	this.swap(this.dataStore, inner, inner+1);
                }
            }
        }
    
    }
    /////////////////////////// ๐Ÿ’– ์ถ”๊ฐ€ ///////////////////////////
    
    selectionSort(){
        let min,temp;
        for(let outer = 0; outer <= this.dataStore.length-2; ++outer){
            min = outer;
            for(let inner = outer+1; inner <= this.dataStore.length-1; ++inner){
                if(this.dataStore[inner] < this.dataStore[min]){
                   min = inner;
                }
                this.swap(this.dataStore, outer, min);
            }
        }
	}
    /////////////////////////// ๐Ÿ’– ์ถ”๊ฐ€ /////////////////////////// 

}

const print = item => console.log(item);

let numElements = 10;
let myNums = new CustomArray(numElements);
myNums.setData();
print(myNums.toString());
myNums.selectionSort();
print('์ •๋ ฌ ํ›„:');
print(myNums.toString());

/**
6 1 5 1 4 7 1 2 3 4 
์ •๋ ฌ ํ›„:
1 1 2 1 4 4 3 5 6 7
*/



Insertion Sort

์‚ฝ์ž… ์ •๋ ฌ์€ ์‚ฌ๋žŒ๋“ค์ด ์ˆซ์ž๋‚˜ ์•ŒํŒŒ๋ฒณ์„ ์ •๋ ฌํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•˜๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•™์ƒ ์ด๋ฆ„์ด ์ ํžŒ ์นด๋“œ๋“ค์„ ์‚ฝ์ž… ์ •๋ ฌํ•œ๋‹ค๊ณ  ํ•˜์ž.

์นด๋“œ ๋”๋ฏธ์—์„œ ํ•˜๋‚˜๋ฅผ ๊บผ๋ƒˆ๋Š”๋ฐ "Smith"๊ฐ€ ๋‚˜์˜ค๋ฉด ์ฑ…์ƒ ์™ผ์ชฝ ๊ฐ€์žฅ์ž๋ฆฌ์— ๋‘”๋‹ค.

[Smith]

๋‹ค์Œ ์นด๋“œ๊ฐ€ "Brown"์ด๋ฉด Smith๊ฐ€ ์ ํžŒ ์นด๋“œ๋ฅผ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ฐ€์–ด์„œ Smith์˜ ์ž๋ฆฌ์— ๋‘๊ณ ,

[Smith]       [Brown] 

๋‹ค์Œ ์นด๋“œ๊ฐ€ "Williams"๋ฉด ๋‹ค๋ฅธ ์นด๋“œ๋“ค์€ ๊ทธ๋Œ€๋กœ ๋‘๊ณ  ์ฑ…์ƒ์˜ ์˜ค๋ฅธ์ชฝ ๋งจ ๋์œผ๋กœ ์ด๋™์‹œํ‚ค๋ฉด ๋œ๋‹ค.

[Smith]       [Brown]      [Williams]

๊ทธ๋‹ค์Œ ์นด๋“œ๊ฐ€ "Acklin"์ด๋ฉด ์นด๋“œ๋“ค์„ ํ•˜๋‚˜์”ฉ ์˜ฎ๊ฒจ์„œ ๋งจ ์•ž์— ์ž๋ฆฌ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ค€ ๋’ค,

๊ทธ ์ž๋ฆฌ์— Acklin์ด ์ ํžŒ ์นด๋“œ๋ฅผ ๋‘๋ฉด ๋œ๋‹ค.

[Acklin]       [Smith]       [Brown]       [Williams]

๊ตฌํ˜„

์œ„์˜ ์˜ˆ์‹œ์—์„œ ์‚ดํŽด๋ดค๋“ฏ์ด, ๊ฐ’์ด ์ œ์ผ ์ž‘์œผ๋ฉด ๋งจ ์•ž์œผ๋กœ ์œ„์น˜์‹œํ‚ค๊ณ ,

ํฌ๋‹ค๋ฉด ์ž๋ฆฌ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ํ•˜๋‚˜์”ฉ ์ด๋™์‹œ์ผœ ์ฃผ๋ฉด ๋œ๋‹ค. ์ด์ „์— ์‚ดํŽด๋ดค๋˜ ์ •๋ ฌ ๋ฐฉ์‹๋“ค์€ ๋‘ ๊ฐ’์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”์คฌ์—ˆ๋”, ์‚ฝ์ž… ์ •๋ ฌ์€ ํ˜„์žฌ ๋ฐ์ดํ„ฐ ๊ฐ’์˜ ์ž๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ๊ทธ๋งŒํผ ํ•˜๋‚˜์”ฉ ๋ฐ€์–ด๋‚ด๋Š” ๋ฐฉ์‹์ด๋‹ค.

insertionSort(){
    let temp, inner;
    for(let outer = 1; outer <= this.dataStore.length-1; ++outer){
        temp = this.dataStore[outer];
        inner = outer;
        while(inner > 0 && (this.dataStore[inner-1] >= temp)){
        	this.dataStore[inner] = this.dataStore[inner-1];
            --inner;
        }
        this.dataStore[inner] = temp;
    }
}

 

๐Ÿ‘‡ ์ „์ฒด ์ฝ”๋“œ

๋”๋ณด๊ธฐ
class CustomArray{
	constructor(numElements){
    	this.dataStore = [];
        this.pos = 0;
        this.numElements = numElements;
        
        for (let i = 0; i < numElements; ++i) { 
        	this.dataStore[i] = i;
		}
    }
    
    // ์‚ฝ์ž…
    insert(element){
    	this.dataStore[this.pos++] = element;
    }

	// ์ถœ๋ ฅ ํฌ๋ฉงํ•ด์ฃผ๊ธฐ ์œ„ํ•œ ํ—ฌํผํ•จ์ˆ˜
    toString(){
    	let retstr = "";
		for (let i = 0; i < this.dataStore.length; ++i) {
			retstr += this.dataStore[i] + " "; 
            if (i > 0 && i % 10 == 0) {
         		retstr += "\n";
      		}
		}
		return retstr;
    }
    
    // ์ œ๊ฑฐ
    clear(){
    	for (let i = 0; i < this.dataStore.length; ++i) {
			this.dataStore[i] = 0; 
        }
    }
    
    // ๋žœ๋ค ๋ฐ์ดํ„ฐ ์ƒ์„ฑ
    setData(){
    	for (let i = 0; i < this.numElements; ++i) {
			this.dataStore[i] = Math.floor(Math.random() * (this.numElements+1));
		}
    }
    
    // index1 ๊ณผ index2์˜ ์ž๋ฆฌ ๋ณ€๊ฒฝ
    swap(arr, index1, index2){
    	let temp = arr[index1];
        arr[index1] = arr[index2];
        arr[index2] = temp;
    }
    
  
    bubbleSort(){
    	let numElements = this.dataStore.length;
        let temp;
        for(let outer = numElements; outer >=2; --outer){
        	for(let inner = 0; inner <= outer-1; ++inner){
            	if(this.dataStore[inner] > this.dataStore[inner+1]){
                	this.swap(this.dataStore, inner, inner+1);
                }
            }
        }
    
    }
    
    
    selectionSort(){
        let min,temp;
        for(let outer = 0; outer <= this.dataStore.length-2; ++outer){
            min = outer;
            for(let inner = outer+1; inner <= this.dataStore.length-1; ++inner){
                if(this.dataStore[inner] < this.dataStore[min]){
                   min = inner;
                }
                this.swap(this.dataStore, outer, min);
            }
        }
	}
    /////////////////////////// ๐Ÿ’– ์ถ”๊ฐ€ /////////////////////////// 
    insertionSort(){
        let temp, inner;
        for(let outer = 1; outer <= this.dataStore.length-1; ++outer){
            temp = this.dataStore[outer];
            inner = outer;
            while(inner > 0 && (this.dataStore[inner-1] >= temp)){
                this.dataStore[inner] = this.dataStore[inner-1];
                --inner;
            }
            this.dataStore[inner] = temp;
        }
	}
    /////////////////////////// ๐Ÿ’– ์ถ”๊ฐ€ ///////////////////////////

}

const print = item => console.log(item);

let numElements = 10;
let myNums = new CustomArray(numElements);
myNums.setData();
print(myNums.toString());
myNums.insertionSort();
print('์ •๋ ฌ ํ›„:');
print(myNums.toString());

/**
6 10 9 8 4 1 7 8 10 6 
์ •๋ ฌ ํ›„:
1 4 6 6 7 8 8 9 10 10
*/

 


๐Ÿ€ ๋งˆ์น˜๋ฉด์„œ

๐Ÿ‘‡ ์ƒ๊ฐ๋ณด๋‹ค ๊ธ€์ด ๊ธธ์–ด์ ธ์„œ 2ํƒ„์€ ์‹ฌํ™” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๋‹ค๋ฃน๋‹ˆ๋‹ค.

[๋‹ค์Œ๊ธ€] 2024.07.28 - [๐Ÿค– data structures & algorithms] - Data Structures & Algorithms with Javascript : Sorting Algorithms (Advanced)

 

๐Ÿ“š Reference

- Data Structures and Algorithms Using Javaโ€ Script by Michael McMillian (O’Reilly). Copyright 2014 Michael McMillan, 978-1-449-36493-9