JAVA常见的排序算法
一、冒泡排序:
package com;import java.util.Arrays;public class BubbleSort {public static Integer[] bubbleSort(Integer[] data) {// 數(shù)組長度int len = data.length;// 臨時(shí)變量int temp = 0;// 冒泡次數(shù)for (int i = 0; i < len-1; i++) {// 交換次數(shù)for (int j = 0; j < len-i-1; j++) {if (data[j]>data[j+1]) {temp = data[j];data[j] = data[j+1];data[j+1] = temp;}}}return data;}public static Integer[] bubbleSort2(Integer[] data) {int temp = 0;// 第一層循環(huán)是跑的趟數(shù)for (int i = 0; i < data.length; i++) {// 第二層循環(huán)是比較次數(shù)for (int j = i; j < data.length; j++) {if (data[i]>data[j]) {temp = data[i];data[i] = data[j];data[j] = temp;}}}return data;}public static void main(String[] args) {Integer[] data = {9,5,6,2,7,8,1,3}; // int[] result = bubbleSort(data);Integer[] result = bubbleSort(data);System.out.println(Arrays.toString(result));}} View Code說明:
1.時(shí)間復(fù)雜度:O(n^2)、空間復(fù)雜度:O(1)
2.算法穩(wěn)定性:穩(wěn)定
3.算法描述:每一次外層循環(huán)結(jié)束之后都可以把最大的數(shù)放在頂端,所以外層循環(huán)就是每趟都把最大的數(shù)往頂層放。內(nèi)層循環(huán)就是把兩兩數(shù)據(jù)進(jìn)行比較,如果前一個(gè)比后一個(gè)大,就交換,依次比較完整個(gè)數(shù)組。
?
二、選擇排序:
package com; import java.util.Arrays;public class SelectSort {public static Integer[] selectSort(Integer[] data) {int len = data.length;for (int i = 0; i < len; i++) {int temp = data[i];int position = i;for (int j = i+1; j < len; j++) {if (data[j]<temp) {temp = data[j];position = j;}}data[position] = data[i];data[i] = temp;}return data;}public static void main(String[] args) {/**5 9 6 2 7 8 1 3**/Integer[] data = {9,5,6,2,7,8,1,3};Integer[] result = selectSort(data);System.out.println(Arrays.toString(result));} } View Code說明:
1.時(shí)間復(fù)雜度:O(n^2)、空間復(fù)雜度:O(1)
2.算法穩(wěn)定性:不穩(wěn)定
3.算法描述:第一次循環(huán)先拿第一個(gè)數(shù)作為基準(zhǔn),依次和后面的數(shù)進(jìn)行比較,每一次外層循環(huán)都可以確定出最大或者最小的數(shù),后面依此類推。
?
三、插入排序:
package com;import java.util.Arrays;public class InsertSort{public static Integer[] insertSort(Integer[] data){int len = data.length;int insertNum;for(int i=1;i<len;i++){insertNum = data[i];int j=i-1;while(j>=0&&data[j]>insertNum){data[j+1] = data[j];j--;}data[j+1] = insertNum;}return data;}public static void main(String[] args) {/**5 9 6 2 7 8 1 3**/Integer[] data = {9,5,6,2,7,8,1,3};Integer[] result = insertSort(data);System.out.println(Arrays.toString(result));} } View Code說明:
1.時(shí)間復(fù)雜度:O(n^2)、空間復(fù)雜度:O(1)
2.算法穩(wěn)定性:穩(wěn)定
3.算法描述:第一次循環(huán)先拿第二個(gè)數(shù)和第一個(gè)做比較,如果第二個(gè)數(shù)大于第一個(gè)數(shù),就相互交換。第二次循環(huán)又把第三個(gè)數(shù)拿來和前面兩個(gè)排好序作比較,看是否交換,依此類推。
三、快速排序:
package com;import java.util.Arrays;public class QuickSort{public static Integer partition(Integer[] data, int start, int end){int temp = data[start];while(start<end){if(start<end&&data[end]>temp){end -= 1;}data[start] = data[end];if(start<end&&data[start]<temp){start += 1;}data[end] = data[start];}data[start] = temp;return start;}public static Integer[] quickSort(Integer[] data, int start, int end){int middle;if(start<end){middle = partition(data,start, end);quickSort(data,start, middle-1);quickSort(data,middle+1,end);}return data;}public static void main(String[] args){Integer[] data = {9,5,6,2,7,8,1,3};Integer[] result = quickSort(data, 0 ,data.length-1);System.out.println(Arrays.toString(result));} } View Code說明:
1.時(shí)間復(fù)雜度:O(nlog2n)、空間復(fù)雜度:O(nlog2n)
2.算法穩(wěn)定性:不穩(wěn)定
3.算法描述:思想是“分而治之”,第一次循環(huán)是先拿第一個(gè)數(shù)作為基準(zhǔn),把比第一個(gè)數(shù)大的數(shù)放在它的右邊,把比第一個(gè)數(shù)小的數(shù)放在它的左邊。
?
轉(zhuǎn)載于:https://www.cnblogs.com/crazy-xf/p/10024562.html
總結(jié)
以上是生活随笔為你收集整理的JAVA常见的排序算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018-11-25-今日总结
- 下一篇: hadoop运维必备命令