Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 30.04.2013, 21:43
Новичок на форуме
Отправить личное сообщение для whoElse Посмотреть профиль Найти все сообщения от whoElse
 
Регистрация: 30.04.2013
Сообщений: 1

Сортировка вставкой
Начал изучать алгоритмы. Дело идёт туговато, но идёт. Первый же алгоритм из книги Кормена - как он должен выглядеть в идеале? Кто-то может объснить, почему первый алгоритм работает быстрее второго? Какие допущены ошибки?

var array = [25, 146, 33, 228, 1047, 5, 87, 556];
	
	
	function insertion_sort(arr) {
		var date1 = new Date;
		for (var x=1; x < 1000000; x++) {
		for (var j=1; j <= arr.length-1; j++) {
			var key = arr[j];
			var i = j - 1;
			while (i >= 0 && arr[i] > key) { // i >= 0 ne nado?
				arr[i+1] = arr[i];
				i--;
			}
			arr[i+1] = key;
		}

	}
			var date2 = new Date;
			alert(date2 - date1);
			alert(arr);
	}

	
	insertion_sort(array);
	
	function insertionSort(items) {
	var date1 = new Date;
	for (var x=1; x < 1000000; x++) {

    var len     = items.length,     // number of items in the array
        value,                      // the value currently being compared
        i,                          // index into unsorted section
        j;                          // index into sorted section
    
    for (i=0; i < len; i++) {
    
        // store the current value because it may shift later
        value = items[i];
        
        /*
         * Whenever the value in the sorted section is greater than the value
         * in the unsorted section, shift all items in the sorted section over
         * by one. This creates space in which to insert the value.
         */
        for (j=i-1; j > -1 && items[j] > value; j--) {
            items[j+1] = items[j];
        }

        items[j+1] = value;
    }
			
    
}
			var date2 = new Date;
			alert(date2 - date1);
			alert(items);
}
insertionSort(array)
Ответить с цитированием
  #2 (permalink)  
Старый 02.05.2013, 17:10
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

А что вы хотите таким способом замерить? Вы один раз сортируете массив, а потом 999998 раз напускаете вашу функцию на уже отсортированный массив.
Ответить с цитированием
  #3 (permalink)  
Старый 02.05.2013, 17:18
Аватар для rgl
rgl rgl вне форума
Профессор
Отправить личное сообщение для rgl Посмотреть профиль Найти все сообщения от rgl
 
Регистрация: 28.02.2011
Сообщений: 349

Сообщение от whoElse Посмотреть сообщение
while (i >= 0 && arr[i] > key) { // i >= 0 ne nado?
Как это не надо? Оно вроде бы и работает без этого, но это фишка JavaScript, что undefined > любоечисло возвращает false. На других языках последствия могут быть непредсказуемы. Да и на JavaScript тоже нехорошо, попробуйте напр. с такими данными:
var array = [25, 146, 33, 228, 1047, 5, 87, 556];
array[-1] = 100;
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка элементов страницы frutality jQuery 2 08.02.2013 14:24
Не работает сортировка в плагине datatable Devlin jQuery 0 26.11.2012 17:23
insertBefore и сортировка Mcqueen Events/DOM/Window 5 05.10.2012 13:01
Сортировка таблиц с tablesort lexniko jQuery 0 03.11.2009 13:02
Сортировка числовых данных в таблице Vladsss Общие вопросы Javascript 15 01.09.2009 17:02