{"ScriptPreparationCode":"window.users = [\r\n { name: \u0027\u0412\u0430\u043D\u044F\u0027, level: \u00273\u0027 },\r\n { name: \u0027\u0421\u0430\u0448\u0430\u0027, level: \u00271\u0027 },\r\n { name: \u0027\u041C\u0430\u0448\u0430\u0027, level: \u00272\u0027 },\r\n { name: \u0027\u041D\u0438\u043A\u0430\u0027, level: \u00273\u0027 },\r\n { name: \u0027\u0412\u0435\u0440\u0430\u0027, level: \u00271\u0027 },\r\n { name: \u0027\u0421\u0430\u0448\u0430\u0027, level: \u00272\u0027 },\r\n { name: \u0027\u0412\u0430\u043D\u044F\u0027, level: \u00272\u0027 }\r\n];\r\n\r\nfunction swap(items, left, right) {\r\n var temp = [];\r\n if (left !== right) {\r\n temp = items[left];\r\n items[left] = items[right];\r\n items[right] = temp;\r\n }\r\n}\r\n\r\nfunction getItem(item, fieldName) {\r\n if (fieldName) {\r\n item = item[fieldName]\r\n }\r\n return item;\r\n}\r\n\r\nfunction bubbleSort(array, fieldName) {\r\n let { length } = array, items = [], i;\r\n while (length--) {\r\n items[length] = array[length];\r\n }\r\n\r\n let swapped = true;\r\n while (swapped) {\r\n swapped = false;\r\n for (i = 1; i \u003C length; i\u002B\u002B) {\r\n if (getItem(items[i - 1], fieldName) \u003E getItem(items[i], fieldName)\r\n \u0026\u0026 getItem(items[i - 1], fieldName) !== getItem(items[i], fieldName))\r\n {\r\n swap(items, i - 1, i);\r\n swapped = true;\r\n }\r\n }\r\n }\r\n return items;\r\n}\r\n\r\nfunction insertionSort(array, fieldName) {\r\n let { length } = array, items = [];\r\n let i, j, current;\r\n while (length--) {\r\n items[length] = array[length];\r\n }\r\n\r\n for (i = 1; i \u003C length; i\u002B\u002B) {\r\n current = items[i];\r\n j = i;\r\n while (j \u003E 0 \u0026\u0026 getItem(items[j - 1], fieldName) \u003E getItem(current, fieldName)) {\r\n items[j] = items[j - 1];\r\n j--;\r\n }\r\n items[j] = current;\r\n }\r\n return items;\r\n}\r\n\r\nfunction selectionSort(array, fieldName) {\r\n let { length } = array, items = [];\r\n let i, j, indexMin;\r\n while (length--) {\r\n items[length] = array[length];\r\n }\r\n for (i = 0; i \u003C length - 1; i\u002B\u002B) {\r\n indexMin = i;\r\n for (j = i \u002B 1; j \u003C length; j\u002B\u002B) {\r\n if (getItem(items[indexMin], fieldName) \u003E getItem(items[j], fieldName)) {\r\n indexMin = j;\r\n }\r\n }\r\n swap(items, indexMin, i);\r\n }\r\n return items;\r\n}\r\n","TestCases":[{"Name":"Bubble sort","Code":"bubbleSort(users, \u0022level\u0022)","IsDeferred":false},{"Name":"Insertion sort","Code":"insertionSort(users, \u0022level\u0022)","IsDeferred":false},{"Name":"Selection sort","Code":"selectionSort(users, \u0022level\u0022)","IsDeferred":false}]}