基础算法系列(十四)排序算法之图书馆排序

来源:互联网 发布:centos 内核降级 编辑:程序博客网 时间:2024/06/04 17:50

图书馆排序是对插入排序的一种改进,它与插入算法的不同就是,它在往新数组中插入元素时,元素的前后是有保留空间,以便用来插入新元素而不用移动别的元素。

/** * 图书馆排序升序 */public static int sort_tushuguan_asc(int[] array) {int count = 0;if (array.length < 2)return count;int[] newArray = new int[array.length * 3];for (int i = 0; i < newArray.length; i++)newArray[i] = -1;if (array[0] > array[1]) {int temp = array[1];array[1] = array[0];array[0] = temp;}for (int i = 0; i < array.length; i++)newArray[i * 3 + 1] = array[i];for (int i = 6; i < newArray.length; i++) {if (newArray[i] == -1)continue;for (int j = 0; j < i; j++) {if (newArray[j] == -1)continue;if (newArray[i] < newArray[j]) {count++;if (j != 0 && newArray[i - 1] == -1) {newArray[i - 1] = newArray[j];newArray[j] = -1;} else {int temp = newArray[i];for (int k = i; k > j; k--) {count++;newArray[k] = newArray[k - 1];}newArray[j] = temp;}}}}for (int i = 0; i < array.length;)for (int j : newArray)if (j != -1) {array[i] = j;i++;}return count;}

/** * 图书馆排序降序 */public static int sort_tushuguan_dasc(int[] array) {int count = 0;if (array.length < 2)return count;int[] newArray = new int[array.length * 3];for (int i = 0; i < newArray.length; i++)newArray[i] = -1;if (array[0] < array[1]) {int temp = array[1];array[1] = array[0];array[0] = temp;}for (int i = 0; i < array.length; i++)newArray[i * 3 + 1] = array[i];for (int i = 6; i < newArray.length; i++) {if (newArray[i] == -1)continue;for (int j = 0; j < i; j++) {if (newArray[j] == -1)continue;if (newArray[i] > newArray[j]) {count++;if (j != 0 && newArray[i - 1] == -1) {newArray[i - 1] = newArray[j];newArray[j] = -1;} else {int temp = newArray[i];for (int k = i; k > j; k--) {count++;newArray[k] = newArray[k - 1];}newArray[j] = temp;}}}}for (int i = 0; i < array.length;)for (int j : newArray)if (j != -1) {array[i] = j;i++;}return count;}

这里只是简单的实现以下图书馆排序。

0 0