排序算法
7y_y
这个作者很懒,什么都没留下…
展开
-
计数排序
/** * 计数排序 --只限数字小于100且大于等于0的数组 * * @param a */ public static void countingSort(int[] a) { int[] b = new int[a.length]; int[] c = new int[100]; for (int i = 0; i < a.length; i++) { //原创 2014-09-11 23:48:46 · 208 阅读 · 0 评论 -
插入排序
public static void insertionSort(int[] a) { for (int i = 0; i < a.length; i++) { int pos = i; for (int j = i - 1; j > -1; j--) { // 找到前面可以插入的位置 if (a[i] < a[j]) { pos = j; } }原创 2014-09-11 23:45:37 · 228 阅读 · 0 评论 -
选择排序
public static void selectionSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { // 只需排前面a.length-1个 int min = i; for (int j = i + 1; j < a.length; j++) { // 从i+1个开始往后找最小的 if (a[j] < a原创 2014-09-11 23:41:24 · 244 阅读 · 0 评论 -
冒泡排序
public static void bubbleSort(int[] a) { for (int i = 0; i < a.length - 1; i++) { // 只需要把a.length-1个放到最后面 for (int j = 0; j < a.length - 1 - i; j++) { // 只需到长度a.length-1-i个 if (a[j] > a[j + 1原创 2014-09-11 23:27:55 · 244 阅读 · 0 评论 -
珠排序
/** * 珠排序 --0到10的数字 * * @param a */ public static void beadSort(int[] a) { int[] b = new int[10]; // 10个串 for (int i = 0; i < a.length; i++) { // 数据分配到串 int count = 0; for (int j原创 2014-09-12 20:46:14 · 377 阅读 · 0 评论 -
鸽巢排序
/** * 鸽巢排序 --针对=0的数字 * * @param a */ public static void pigeonholeSort(int[] a) { int[] b = new int[100]; for (int i = 0; i < a.length; i++) { // 计数 b[a[i]]++; } int n = 0; for原创 2014-09-12 20:47:14 · 351 阅读 · 0 评论 -
基数排序
/** * 基数排序 --针对三位正整数,低位优先级低,高位优先级高 * * @param a */ public static void radixSort(int[] a) { // 基数排序用于多关键字排序,实在想不出个好场景 class WrapInt { int num; int n1; int n2; int n3; publ原创 2014-09-11 23:50:15 · 228 阅读 · 0 评论 -
归并排序
public static void mergeSort(int[] a) { mergeSortA(a, 0, a.length - 1); } private static void mergeSortA(int[] a, int begin, int end) { if (end - begin > 0) { // 分别排序 int middle = begin +原创 2014-09-11 23:45:36 · 283 阅读 · 0 评论 -
希尔排序
public static void shellSort(int[] a) { for (int gap = a.length / 2; gap > 0; gap /= 2) { // 分配步长 for (int i = 0; i < gap; i++) { // 按步长分组 for (int j = i; j < a.length; j += gap) { // 插入排序原创 2014-09-11 23:46:45 · 201 阅读 · 0 评论 -
堆排序
public static void heapSort(int[] a) { for (int i = (a.length - 2) / 2; i >= 0; i--) { // 从最后一个非叶子节点开始初始化堆 adjustHeap(a, a.length, i); } int[] tmp = new int[a.length]; for (int i = 0; i <原创 2014-09-11 23:44:37 · 238 阅读 · 0 评论 -
快速排序
public static void quickSort(int[] a) { quickSortA(a, 0, a.length - 1); } private static void quickSortA(int[] a, int begin, int end) { if (begin < end) { int pivot = partition(a, begin, end原创 2014-09-11 23:40:08 · 249 阅读 · 0 评论 -
Bogo排序
public static void bogoSort(int[] a) { Random rd = new Random(System.currentTimeMillis()); boolean ordered = false; while (!ordered) { for (int i = 0; i < a.length; i++) { // shuffle swa原创 2014-09-11 23:38:30 · 328 阅读 · 0 评论 -
梳排序
public static void combSort(int[] a) { int gap = a.length; boolean ordered = false; // 判断是否排好序,排好序了就结束 while (gap > 1 || !ordered) { // 按照gap不断调整 if (gap > 1) { gap /= 1.3; } ordere原创 2014-09-11 23:35:19 · 269 阅读 · 0 评论 -
奇偶排序
public static void oddevenSort(int[] a) { boolean ordered = false; // 判断有没有排好序 while (!ordered) { ordered = true; for (int i = 1; i < a.length - 1; i += 2) { if (a[i] > a[i + 1]) {原创 2014-09-11 23:33:57 · 213 阅读 · 0 评论 -
臭皮匠排序
public static void stoogeSort(int[] a) { stoogeSortA(a, 0, a.length - 1); } private static void stoogeSortA(int[] a, int i, int j) { if (a[i] > a[j]) { swap(a, i, j); } if (j - i + 1 >=原创 2014-09-11 23:33:51 · 510 阅读 · 0 评论 -
地精排序
public static void gnomeSort(int[] a) { int i = 1; while (i < a.length) { if (a[i] >= a[i - 1]) { i++; } else { swap(a, i, i - 1); if (i > 1) //至少2才自减,起始是1 i--; } } }原创 2014-09-11 23:30:24 · 296 阅读 · 0 评论 -
鸡尾酒排序
public static void cocktailSort(int[] a) { for (int i = 0; i < a.length / 2; i++) { // 单数时只要一半之前,双数时要一半 for (int j = i; j < a.length - i - 1; j++) { // 找最大的放后面 if (a[j] > a[j + 1]) { sw原创 2014-09-11 23:27:53 · 257 阅读 · 0 评论 -
桶排序
/** * 桶排序 * 针对<100的数,桶宽为10,桶数为10,映射函数为f(x)=x/10 * @param a */ public static void bucketSort(int[] a){ ArrayList[] buckets = new ArrayList[10]; for(int i=0;i<10;i++){ //建桶 buckets[i] =原创 2014-09-11 23:51:06 · 251 阅读 · 0 评论 -
树形选择排序
/** * 树形选择排序 --元素要2^n个,不够补,如无穷大 * * @param a */ public static void treeSelectionSort(int[] a) { int n = (int) (Math.log(a.length) / Math.log(2)) + 1; int[][] b = new int[n + 1][]; f原创 2014-09-12 20:47:17 · 340 阅读 · 0 评论