Lir

Алгоритмизация. Сортировка вставкой, Сортировка слиянием.

Lir
Sep 4th, 2012
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Сортировка вставкой - эффективна при небольших объемах данных. Время выполнения - с1 * n^2, где c1 - некая константа не зависящая от n, характеризуется качеством программиста (чем лучше программист тем меньше эта константа), языком программирования (чем более низкоуровневый язык программирования тем меньше эта константа), компилятором (чем лучше компилятор тем меньше эта константа), короче количество инструкций переданных процессору для выполнения этого алгоритма (чем меньше тем лучше). n - количество элементов поступивших на сортировку (количество сортируемых элементов массива).
  2.  
  3. Сортировка слиянием - эффективней чем сортировка вставкой при больших объемах данных. Время выполнения - c2 * n * log2 n, где c2 - некая константа не зависящая от n, характеризуется качеством программиста (чем лучше программист тем меньше эта константа), языком программирования (чем более низкоуровневый язык программирования тем меньше эта константа), компилятором (чем лучше компилятор тем меньше эта константа), короче количество инструкций переданных процессору для выполнения этого алгоритма (чем меньше тем лучше).
  4. n - количество элементов поступивших на сортировку (количество сортируемых элементов массива).
  5.  
  6. Что бы посчитать время выполнения алгоритма методом вставки для миллиона элементов, предположим что использовался низкоуровневый язык программирования, хороший компилятор, и крутой программист, тогда c1 = 2 (допустим), а скорость работы компьютера миллиард команд в секунду, получаем такую формулу для алгоритма вставки:
  7.                                         (2 * (10^6)^2)/10^9 = 2000с
  8.                                                                  10^6 это миллион (количество элементов)
  9.                             10/9 это миллиард (количество инструкций в секунду)
  10.  
  11. Что бы посчитать время выполнения алгоритма методом замены для миллиона элементов, предположим что использовался высокоуровневый язык программирования, плохой программист, плохой компилятор тогда c2 будет большой c2 = 50 (допустим), а скорость компьютера 10 миллионов инструкций в секунду, получаем такую формулу для алгоритма замены:                                           (50 * 10^6 * log2 10^6) / 10^7 = 100 (прибл)
  12.                                                                 10^6 это миллион (количество элементов)
  13.                             10^7 это 10 млн (количество инструкций в секунду)
  14.                             log2 10^6 = 19.93
  15. Реализация алгоритма сортировки вставкой
  16. //Sort insertion по возрастанию
  17. private function sortInsertion(array:Array):void{
  18.     var n:int = array.length;
  19.     for (var j:int = 1; j < n; j++){
  20.         //Запоминаем чилсло которое будем премещать направильную позицию
  21.         var key:int = array[j];
  22.         //Получаем индекс числа стоящий перед чилсом котороу будем перемещать
  23.         var i:int = j - 1;
  24.         //Если число которое будем перемещать меньше чем перед ним стоящее начинаем сортировать массив
  25.         while (i > -1 && array[i] > key){
  26.             array[i + 1] = array[i];
  27.             i--;
  28.         }
  29.         //В конце концов ставим сортируемое чилсо на правильную позицию
  30.         array[i + 1] = key;
  31.     }
  32. }
Advertisement
Add Comment
Please, Sign In to add comment