 
			
				24.09.2013, 11:00
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.09.2013 
					
					
					
						Сообщений: 4
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	| 
	
	
		
		
			
			 
				Не выполняется условие в IF
			 
			
		
		
		
		Доброе утро, камрады... 
Я озадачен.  
Возможно здорово туплю, но глаз уже замылился и ничего не понимаю.
 
Банальная пузырьковая сортировка. Проще некуда. 
Сортирую массив по одной из колонок. Сортируется где-то наполовину, потом перестает.
 
Смотрю в Firebug пошагово и не верю глазам 
С=14, arr[i+1][2]=16 и условие не выполняется (блок пропускается). 
При этом несколько проходов уже было успешно сделано на том же массиве данных.
 
if ( С < arr[i+1][2] )
{
	arr[i][0] = arr[i+1][0];
	arr[i][1] = arr[i+1][1];
	arr[i][2] = arr[i+1][2];
	
	arr[i+1][0] = A;
	arr[i+1][1] = B;
	arr[i+1][2] = C;
	
	change_flag = 1;
}
Помогите плиз лыжи стронуть с места... не едут...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.09.2013, 14:18
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Papazol
			
		
	 | 
 
	| 
		С=14, arr[i+1][2]=16 и условие не выполняется (блок пропускается).
	 | 
 
	
 
 Т.е. нам верить тебе на слово?    
Конечно IF сломался - фигли!    
Тут у других не только IFы ломались... В JS вообще мало чего работает...    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.09.2013, 15:22
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.09.2013 
					
					
					
						Сообщений: 4
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от ksa
			 
		
	 | 
 
	
		Т.е. нам верить тебе на слово?    
Конечно IF сломался - фигли!    
Тут у других не только IFы ломались... В JS вообще мало чего работает...  
	 | 
 
	
 
 А причем здесь "верить-не верить"? Я же ничего тут не продаю и в секту не заманиваю.
 
По существу-то есть что-нибудь сказать?
 
IFы, кстати, "ломаются" не так и редко в JS, по сравнению с Си, например.
 Вот, например. 
Но мне приведение значений parseInt-ом не помогло. 
"use strict" тоже не помог (хотел избавиться от возможных глюков с восьмеричным представлением числа в массиве данных).
 
Кто-нибудь сталкивался с таким случаем? Куда копать? 
(гуглёж пока ничего особенного не принёс)  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.09.2013, 15:30
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Аспирант 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 01.04.2008 
					
					
					
						Сообщений: 52
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от Papazol
			 
		
	 | 
 
	
		А причем здесь "верить-не верить"? Я же ничего тут не продаю и в секту не заманиваю. 
 
По существу-то есть что-нибудь сказать? 
 
IFы, кстати, "ломаются" не так и редко в JS, по сравнению с Си, например. 
 
Вот, например.  
 
Но мне приведение значений parseInt-ом не помогло. 
"use strict" тоже не помог (хотел избавиться от возможных глюков с восьмеричным представлением числа в массиве данных). 
 
Кто-нибудь сталкивался с таким случаем? Куда копать? 
(гуглёж пока ничего особенного не принёс)
	 | 
 
	
 
 Для начала покажите весь код, а не кусок с if. Да и вообще интересно, в массиве точно цифры.  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.09.2013, 15:53
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Papazol
			
		
	 | 
 
	
		IFы, кстати, "ломаются" не так и редко в JS, по сравнению с Си, например. 
 
Вот, например.
	 | 
 
	
 
 Ужоснах!    
Как теперь писать - х/з...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.09.2013, 15:54
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 CacheVar 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 19.08.2010 
					
					
					
						Сообщений: 14,298
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Papazol
			
		
	 | 
 
	| 
		Куда копать?
	 | 
 
	
 
 Тестовый пример нужно делать полный. И это для начала...    
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.09.2013, 17:46
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.09.2013 
					
					
					
						Сообщений: 4
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от vashurin
			 
		
	 | 
 
	| 
		Для начала покажите весь код, а не кусок с if. Да и вообще интересно, в массиве точно цифры.
	 | 
 
	
 
 Получаю массив пар кодов примерно такой 
(на самом деле их тысячи)
 
var source = 
[
[743,434],
[743,968],
[310,968],
[262,434],
[695,677],
[695,274],
[145,274],
[695,174],
[743,871],
[145,532],
[922,677],
[485,677],
[821,729],
[743,336],
[111,274],
[588,729],
[743,274],
[695,968],
[695,677],
[821,174],
[111,871],
[821,871],
[145,968],
[922,968],
[588,729],
[111,532]
]
 
Нужно подсчитать, какие пары встречаются часто, какие реже - частотность, короче. Ну я и считаю эту частотность (что получается), а потом пытаюсь ее сортировать (что не получается)
 
На самом деле в массиве могут быть некачественные данные,  
поэтому я привожу их в int
 
function freqPairs( source )
{
	var pairs_matched = new Array();
	var pairsmatched_n=0;
	var pairs = new Array();
	var pairs_n=0;
	var tmp_pairs_freq = [-1,-1,-1];
	var tmp_pair = [-1,-1];
	// насильно конвертим source в десятичный инт
	for (var b=0; b < source.length; b++)
	{
		tmp_pair[0] = parseInt(source[b][0],10);
		tmp_pair[1] = parseInt(source[b][1],10);
		
		pairs_n = pairs.push( tmp_pair );
		
		tmp_pair = [-1,-1];
	 }
	
	// подсчитываем частотность пар
	var cnt2=0;
	var pair_flag=1;
	tmp_pairs_freq[0] = pairs[0][0];
	tmp_pairs_freq[1] = pairs[0][1];
	tmp_pairs_freq[2] = parseInt(1,10);
	pairsmatched_n = pairs_matched.push( tmp_pairs_freq );
	for (G=1; G < pairs.length; G++) 
	{
		tmp_pairs_freq = [-1,-1,-1];
		pair_flag=1;
		for (F=0; F < pairs_matched.length; F++) 
		{
			if ( pairs[G][0] === pairs_matched[F][0] )
			{
				if ( pairs[G][1] === pairs_matched[F][1] )
				{
					pair_flag=0;
					cnt2=pairs_matched[F][2];
					cnt2++;
					pairs_matched[F][2]=cnt2;
				 }
			 }
		}
		if ( pair_flag )
		{
			tmp_pairs_freq[0] = pairs[G][0];
			tmp_pairs_freq[1] = pairs[G][1];
			tmp_pairs_freq[2] = parseInt(1,10);
			pairsmatched_n = pairs_matched.push( tmp_pairs_freq );
		 }
	}	
	
	// сортируем пары по частотности
	var A = 0;
	var B = 0;
	var С = 0;
	var change_flag = 1;
	
	while ( change_flag > 0 )
	{
		A = pairs_matched[0][0];
		B = pairs_matched[0][1];
		С = pairs_matched[0][2];
		
		change_flag = 0;
		for (var S=0; S < pairs_matched.length-1; S++) 
		{
			A = pairs_matched[S][0];
			B = pairs_matched[S][1];
			C = pairs_matched[S][2];
			
                        //вот тут периодически не срабатывает			
                        if ( С < pairs_matched[S+1][2] )	
			{
				pairs_matched[S][0] = pairs_matched[S+1][0];
				pairs_matched[S][1] = pairs_matched[S+1][1];
				pairs_matched[S][2] = pairs_matched[S+1][2];
				
				pairs_matched[S+1][0] = A;
				pairs_matched[S+1][1] = B;
				pairs_matched[S+1][2] = C;
				
				change_flag = 1;
			}
		}
	}
}
 
		
	
		
		
		
		
		
		
	
		
			
			
	
			
			
			
			
			
				 
			
			
			
			
			
			
				
			
			
			
		 
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				25.09.2013, 18:42
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		Papazol,
   
 
var source =
[
[743,434],
[743,968],
[310,968],
[262,434],
[695,677],
[695,274],
[145,274],
[695,174],
[743,871],
[145,532],
[922,677],
[485,677],
[821,729],
[743,336],
[111,274],
[588,729],
[743,274],
[695,968],
[695,677],
[821,174],
[111,871],
[821,871],
[145,968],
[922,968],
[588,729],
[111,532]
]
function freqPairs(b) {
    for (var c = {}, a = 0; a < b.length; a++) {
        var d = b[a];
        c[d] ? c[d]++ : c[d] = 1
    }
    b.sort(function (a, b) {
        return c[b] - c[a] || b[0] - a[0] || b[1] - a[1]
    });
    for (a = 0; a < b.length; a++) b[a][2] = c[b[a]];
    return b
};
alert(freqPairs( source ).join('\n'));
 
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.09.2013, 13:55
			
			
			
		  
	 | 
 
	
		
		
		
			
			| 
			
				
				
				 Новичок на форуме 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 24.09.2013 
					
					
					
						Сообщений: 4
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	
		
			Сообщение от рони
			 
		
	 | 
 
	
		Papazol, 
   
function freqPairs(b) {
    for (var c = {}, a = 0; a < b.length; a++) {
        var d = b[a];
        c[d] ? c[d]++ : c[d] = 1
    }
    b.sort(function (a, b) {
        return c[b] - c[a] || b[0] - a[0] || b[1] - a[1]
    });
    for (a = 0; a < b.length; a++) b[a][2] = c[b[a]];
    return b
};
alert(freqPairs( source ).join('\n'));
	 | 
 
	
 
 
Спасибо за код! 
Код рабочий - в смысле, что он выполняется и ничего не ломается.  
Правда он все равно не отсортировал, как надо, но его наверняка можно доточить.
 
На самом деле я зарешал проблему самостоятельно. Применил другой алгоритм - шейкерную сортировку. Это конечно просто улучшение того же "пузырька", но мне вдруг помогло.
 
То, что проблему решил - это хорошо... 
А вот то, что так и не понял, шоэтобыло - это плохо...  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
	
	
	
		
	
		
		
		
			
			 
			
				26.09.2013, 14:15
			
			
			
		  
	 | 
 
	
		
		
		
			  | 
			
			
				
				
				 Профессор 
				
				
				
				
	
 
 
 
			 | 
			  | 
			
				
				
					Регистрация: 27.05.2010 
					
					
					
						Сообщений: 33,150
					 
					
					
			
		
 
		 
		
			 | 
		 
		 
		
	 | 
 
	
	
	
		
		
		
		
		
	
 
	| 
		
			Сообщение от Papazol
			
		
	 | 
 
	| 
		Правда он все равно не отсортировал
	 | 
 
	
 
 и каков же результат сортировки должен быть?  
		
	
		
		
		
		
		
		
	
		
		
	
	
	 | 
 
 
	 
		 | 
 
 
 
 |  
  |