您的位置:首页 > 编程语言 > Java开发

Java基础-排序算法

2016-03-20 14:33 537 查看

1.冒泡排序

/**
* 冒泡排序算法
* <p/>
* 依次把第i个元素与 i+1到arr.length的元素进行比较,
* 发现有比i更小(大)的元素的话,则进行位置替换
* <p/>
* 第i次遍历,保证i是 i+1到arr.length里面最小(大)的元素
*
* 时间复杂度O(n*n)
*/
public void bubbleSort(int[] arr) {
System.out.println("排序前:" + Arrays.toString(arr));
int tmp;//临时变量,用于值交换
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
//如果arr[i]不是最小的,则把最小的放到i的位置
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
System.out.println("排序后:" + Arrays.toString(arr));
}


2.快速排序

/**
* 快速排序
* 分治思想,大于idx的放右边,小于idx的放左边,保证idx是正确的位置,
* 然后同时对i的左边和右边分别进行排序
*/
public static void quickSort(int[] arr) {
System.out.println("排序前:" + Arrays.toString(arr));
sort1(arr, 0, arr.length - 1);
System.out.println("排序后:" + Arrays.toString(arr));
}

//实现方式一
public void sort1(int[] arr, int left, int right) {
int low = left;//低位
int high = right;//高位
int key = arr[left];//当前寻找位置的key

while (low < high) {
while (low < high && arr[high] >= key) {
high--;
}

if (low < high) {
int temp = arr[high];
arr[high] = arr[low];
arr[low] = temp;
low++;
//位置交换完成后,低位需要加1,
//因为arr[low]肯定是比key小,不需要再去比较
}

while (low < high && arr[low] <= key) {
low++;
}

if (low < high) {
int temp = arr[high];
arr[high] = arr[low];
arr[low] = temp;
high--;
//位置交换完成后,高位需要减1,
//因为交换到高位的数值肯定比key大,不需要再去比较
}
}
//while循环结束,此时,arr[low]的左边都比它小,右边都比arr[low]大
//也就是说,arr[low]数值所在的位置肯定是争取的

//继续对左边进行排序
if (low > left) {
sort1(arr, left, low - 1);
}

//继续对右边进行排序
if (high < right) {
sort1(arr, low + 1, right);
}
}


3.插入排序

/**
* 插入排序
* 第i次循环保证 [0-i]的数据是有序的,然后第i个数继续加入到有序列表
* 基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据
* 算法适用于少量数据的排序,时间复杂度为O(n^2)
*/
public void insertionSort(int[] arr) {
System.out.println("排序前:" + Arrays.toString(arr));
for (int i = 1; i < arr.length; i++) {
int curr = arr[i];//记住当前需要移动的数

int j = i - 1;
while (j >= 0 && arr[j] > curr) {//这里需要注意,每个数都与当前数比较,找到当前数的正确位置
arr[j + 1] = arr[j];//数据复制
j--;//如果不是正确的位置,--后继续找
}
//到这里,找到了正确的位置,进行交换
arr[j + 1] = curr;
}
System.out.println("排序后:" + Arrays.toString(arr));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 排序算法