日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA常见的排序算法

發(fā)布時(shí)間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA常见的排序算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、冒泡排序:

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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。