import java.util.Arrays;
岳普湖ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:13518219792(備注:SSL證書合作)期待與您的合作!
import java.util.Collection;
public class Demo2 {
public static void main(String[] args) {
// 這是你的三個數(shù)
int[] arr = { 12, 32, 18 };
// 兩層嵌套循環(huán)
for (int i = 0; i arr.length; i++) {
for (int j = 0; j i; j++) {
// 如果后者小于前者,讓他們交換位置,一直循環(huán)
// 直到每個數(shù)字都從頭到尾跟數(shù)組里的每個數(shù)字比較一次
if (arr[i] arr[j]) {
// 這三步就是交換位置,相信聰明的你一定看得懂了
arr[i] = arr[i] + arr[j];
arr[j] = arr[i] - arr[j];
arr[i] = arr[i] - arr[j];
}
}
}
//最后打印出來
for (int i = 0; i arr.length; i++) {
System.out.println(arr[i]);
}
}
}
資料拓展:
Java是一門面向?qū)ο缶幊陶Z言,不僅吸收了C++語言的各種優(yōu)點,還摒棄了C++里難以理解的多繼承、指針等概念,因此Java語言具有功能強大和簡單易用兩個特征。Java語言作為靜態(tài)面向?qū)ο缶幊陶Z言的代表,極好地實現(xiàn)了面向?qū)ο罄碚?/p>
import?java.util.Scanner;
/**
*?@author?young
*?@Description:
*/
public?class?Test?{
public?static?void?main(String[]?args)?{
Scanner?scanner?=?new?Scanner(System.in);
int[]?a?=?new?int[10];
int?count?=?0;
while?(count??10)?{
System.out.print("輸入第"?+?(count?+?1)?+?"個數(shù):");
a[count]?=?scanner.nextInt();
count++;
}
System.out.print("\n排序之前的數(shù)組:");
for(int?i?=?0;?i??a.length;?i++){
System.out.print(a[i]?+?"??");
}
//?選擇排序:
for?(int?i?=?0;?i??a.length;?i++)?{
int?min?=?a[i];
int?n?=?i;?
for?(int?j?=?i?+?1;?j??a.length;?j++)?{
if?(a[j]??min)?{?
min?=?a[j];
n?=?j;
}
}
a[n]?=?a[i];
a[i]?=?min;
}
System.out.print("\n選擇排序之后:");
for?(int?i?=?0;?i??a.length;?i++)?{
System.out.print(a[i]?+?"?");
}
}
}
給你介紹4種排序方法及源碼,供參考
1.冒泡排序
主要思路: 從前往后依次交換兩個相鄰的元素,大的交換到后面,這樣每次大的數(shù)據(jù)就到后面,每一次遍歷,最大的數(shù)據(jù)到達最后面,時間復(fù)雜度是O(n^2)。
public?static?void?bubbleSort(int[]?arr){
for(int?i?=0;?i??arr.length?-?1;?i++){
for(int?j=0;?j??arr.length-1;?j++){
if(arr[j]??arr[j+1]){
arr[j]?=?arr[j]^arr[j+1];
arr[j+1]?=?arr[j]^arr[j+1];
arr[j]?=?arr[j]^arr[j+1];
}
}
}
}
2.選擇排序
主要思路:每次遍歷序列,從中選取最小的元素放到最前面,n次選擇后,前面就都是最小元素的排列了,時間復(fù)雜度是O(n^2)。
public?static?void?selectSort(int[]?arr){
for(int?i?=?0;?i?arr.length?-1;?i++){
for(int?j?=?i+1;?j??arr.length;?j++){
if(arr[j]??arr[i]){
arr[j]?=?arr[j]^arr[i];
arr[i]?=?arr[j]^arr[i];
arr[j]?=?arr[j]^arr[i];
}
}
}
}
3.插入排序
主要思路:使用了兩層嵌套循環(huán),逐個處理待排序的記錄。每個記錄與前面已經(jīng)排好序的記錄序列進行比較,并將其插入到合適的位置,時間復(fù)雜度是O(n^2)。
public?static?void?insertionSort(int[]?arr){
int?j;
for(int?p?=?1;?p??arr.length;?p++){
int?temp?=?arr[p];???//保存要插入的數(shù)據(jù)
//將無序中的數(shù)和前面有序的數(shù)據(jù)相比,將比它大的數(shù),向后移動
for(j=p;?j0??temp?arr[j-1];?j--){
arr[j]?=?arr[j-1];
}
//正確的位置設(shè)置成保存的數(shù)據(jù)
arr[j]?=?temp;
}
}
4.希爾排序
主要思路:用步長分組,每個分組進行插入排序,再慢慢減小步長,當(dāng)步長為1的時候完成一次插入排序,? 希爾排序的時間復(fù)雜度是:O(nlogn)~O(n2),平均時間復(fù)雜度大致是O(n^1.5)
public?static?void?shellSort(int[]?arr){
int?j?;
for(int?gap?=?arr.length/2;?gap??0?;?gap/=2){
for(int?i?=?gap;?i??arr.length;?i++){
int?temp?=?arr[i];
for(j?=?i;?j=gap??temparr[j-gap];?j-=gap){
arr[j]?=?arr[j-gap];
}
arr[j]?=?temp;
}
}
}
可以實現(xiàn)比較器Comparator來定制排序方案,同時使用Colletions.sort的方式進行排序,代碼如下:
public void sortDesc(ListLong s){
Collections.sort(s, new ComparatorLong() {
public int compare(Long o1, Long o2) {
Long result = o2 - o1;
return result.intValue();
}
});
s.forEach(item-{
System.out.print(item +" ");
});
}
同時常用的比較排序算法主要有:冒泡排序,選擇排序,插入排序,歸并排序,堆排序,快速排序等。
java的冒泡排序?qū)崿F(xiàn)如下:
public?static?void?bubbleSort(int?[]arr)?{????????for(int?i?=0;iarr.length-1;i++)?{????????????for(int?j=0;jarr.length-i-1;j++)?{//-1為了防止溢出????????????????if(arr[j]arr[j+1])?{????????????????????int?temp?=?arr[j];?????????????????????????????????????????arr[j]=arr[j+1];?????????????????????????????????????????arr[j+1]=temp;????????????}????????????}????????????}????}
還有非比較排序,時間復(fù)雜度可以達到O(n),主要有:計數(shù)排序,基數(shù)排序,桶排序等。
將數(shù)字從大到小排序的方法:
例如簡一點的冒泡排序,將第一個數(shù)字和后面的數(shù)字逐個比較大小,如果小于,則互換位置,大于則不動。此時,第一個數(shù)為數(shù)組中的最大數(shù)。然后再將第二個數(shù)與后面的數(shù)逐個比較,以次類推。
示例代碼如下:?
public?class?Test?{?
public?static?void?main(String[]?args)?{?
int?[]?array?=?{12,3,1254,235,435,236,25,34,23};?
int?temp;?
for?(int?i?=?0;?i??array.length;?i++)?{?
for?(int?j?=?i+1;?j??array.length;?j++)?{?
if?(array[i]??array[j])?{?
temp?=?array[i];?
array[i]?=?array[j];?
array[j]?=?temp; //?兩個數(shù)交換位置?
}?
}?
}?
for?(int?i?=?0;?i??array.length;?i++)?{?
System.out.print(array[i]+"??");?
}?
}?
}
數(shù)組對于每一門編程語言來說都是重要的數(shù)據(jù)結(jié)構(gòu)之一,當(dāng)然不同語言對數(shù)組的實現(xiàn)及處理也不盡相同。
Java 語言中提供的數(shù)組是用來存儲固定大小的同類型元素。
你可以聲明一個數(shù)組變量,如 numbers[100] 來代替直接聲明 100 個獨立變量 number0,number1,....,number99
擴展資料
Java中利用數(shù)組進行數(shù)字排序一般有4種方法:
1、選擇排序是先將數(shù)組中的第一個數(shù)作為最大或最小數(shù),然后通過循環(huán)比較交換最大數(shù)或最小數(shù)與一輪比較中第一個數(shù)位置進行排序。
2、冒泡排序也是先將數(shù)組中的第一個數(shù)作為最大或最小數(shù),循環(huán)比較相鄰兩個數(shù)的大小,滿足條件就互換位置,將最大數(shù)或最小數(shù)沉底。
3、快速排序法主要是運用Arrays類中的Arrays.sort方法()實現(xiàn)。
4、插入排序是選擇一個數(shù)組中的數(shù)據(jù),通過不斷的插入比較最后進行排序。
選擇排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關(guān)鍵字最大的記錄作為有序序列中第i個記錄?;诖怂枷氲乃惴ㄖ饕泻唵芜x擇排序、樹型選擇排序和堆排序。
java選擇排序法代碼
import java.util.Random;
public class ArrayDemo {?
public static void main(String[] args) {?
Random random=new Random();?
int[] pData=new int[10];?
for(int i=0;ipData.length;i++){ //隨機生成10個排序數(shù)
Integer a =random.nextInt(100);? ? ?
pData[i]= a;? ? ?
System.out.print(pData[i]+" ");?
}?
System.out.println();?
pData=Choose(pData);?
for(int i=0;ipData.length;i++){? ? ?
System.out.print(pData[i]+" ");?
}?
System.out.println();
}
public static int[] Choose(int[] pData){?
System.out.println();?
int k;?
for (int i = 0; i pData.length; i++) {? ? ?
k = i;? ? ?
for (int j = i; j pData.length; j++) {? ? ? ? ?
if(pData[j]pData[k]){k = j;}? ? ?
}? ? ?
int a=pData[i];? ? ?
pData[i]=pData[k];? ? ?
pData[k]=a;?
}?
return pData;
}
}
擴展資料:
其他排序方法:
簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;
以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。
以下為簡單選擇排序的存儲狀態(tài),其中大括號內(nèi)為無序區(qū),大括號外為有序序列:
初始序列:{49 27 65 97 76 12 38}
第1趟:12與49交換:12{27 65 97 76 49 38}
第2趟:27不動 :12 27{65 97 76 49 38}
第3趟:65與38交換:12 27 38{97 76 49 65}
第4趟:97與49交換:12 27 38 49{76 97 65}
第5趟:76與65交換:12 27 38 49 65{97 76}
第6趟:97與76交換:12 27 38 49 65 76 97 完成
參考資料:百度百科-選擇排序法