java排序算法

package com.test; import java.util.HashMap; /** * 各种排序(针对整型int) * * @author alen * */ public class Sort { /** * 插入排序 * * 该算法每次插入第i+1到前i个有序数组中一个合适位置 * * @param data */ public static void InsertSort(int[] data) { int temp; for (int i = 0; i < data.length; i++) { for (int j = i; j > 0 && j < data.length; j--) { if (data[j - 1] > data[j]) { temp = data[j - 1]; data[j - 1] = data[j]; data[j] = temp; } } } } /** * 冒泡排序 * * 算法思想是每次从数组末端开始比较相邻两元素,把第i小的冒泡到数组的第i个位置 * * @param data */ public static void BubbleSort(int[] data) { int temp; for (int i = 0; i < data.length; i++) { for (int j = data.length - 1; j > 0; j--) { if (data[j] < data[j - 1]) { temp = data[j - 1]; data[j - 1] = data[j]; data[j] = temp; } } } } /** * 选择排序 * * 选择排序相对于冒泡来说,它不是每次发现逆序都交换,而是在找到全局第i小的时候记下该元素位置,最后跟第i个元素交换,从而保证数组最终的有序。 * 相对与插入排序来说,选择排序每次选出的都是全局第i小的,不会调整前i个元素了 * * @param data */ public static void SelectSort(int[] data) { int mix, temp, pos; for (int i = 0; i < data.length; i++) { mix = data[i]; pos = i; // 记录当前第i小的位置 for (int j = i; j < data.length; j++) { // 找到第i小的元素,并与data[i]交换 if (data[j] < mix) { mix = data[j]; pos = j; // 找到位置 } // 交换 if (pos != i) { temp = data[i]; data[i] = data[pos]; data[pos] = temp; } } } } /** * 快速排序 * * 一般分如下步骤: 1)选择一个枢纽元素(有很对选法,我的实现里采用去中间元素的简单方法) * 2)使用该枢纽元素分割数组,使得比该元素小的元素在它的左边,比它大的在右边。并把枢纽元素放在合适的位置。 * 3)根据枢纽元素最后确定的位置,把数组分成三部分,左边的,右边的,枢纽元素自己,对左边的,右边的分别递归调用快速排序算法即可。 * 快速排序的核心在于分割算法,也可以说是最有技巧的部分。 * * @param data */ public static void QuickSort(int[] data, int left, int right) { int i = left, j = right; int middle, temp; middle = data[(left + right) / 2]; do { while (data[i] < data[middle] && i < right) i++; while (data[j] > data[middle] && j > left) j--; if (i <= j) { temp = data[i]; data[i] = data[j]; data[j] = temp; i++; j--; } } while (i <= j); /* for (int t = 0; t < data.length; t++) { System.out.print(data[t] + " "); } System.out.println(" ");*/ if(left < j){ QuickSort(data,left,j); } if(right > i){ QuickSort(data,i,right); } } // 测试 public static void main(String[] args) { int[] data = { 3, 2, 1, 4, 5, 6, 5 }; // InsertSort(data); // BubbleSort(data); // SelectSort(data); QuickSort(data,0,data.length-1); for (int i = 0; i < data.length; i++) { // System.out.print(data[i] + " "); } } } 

 

你可能感兴趣的:(java排序算法)