java 数组冒泡排序、转置(降序)
1.java 數(shù)組冒泡排序
排序的基本原理(升序):
- 原始數(shù)據(jù): ?2 、1 、9 、0 、5 、3 、7 、6 、8;
- ? ? 第一次排序: 1 ?、2 、0 、5 、3 、7 、6 、8 、9 ;
- ? ? 第二次排序: 1 ?、0 、2 、3 、5 、6 、7 、8 、9 ;
- ? ?第三次排序 : 1 、 2 、3 、4 、5 、6 、7 、8 、9 ;?
以上是基礎(chǔ)的原理過(guò)程,但是有一個(gè)問(wèn)題,數(shù)據(jù)的不同可能排序的次數(shù)出現(xiàn)不同,但是有多少個(gè)數(shù)據(jù),總的排序次數(shù)不會(huì)超過(guò)數(shù)組的長(zhǎng)度。只要排序的次數(shù)達(dá)到長(zhǎng)度*長(zhǎng)度的次數(shù),那么所有的數(shù)據(jù)就可以排序成功。
進(jìn)行冒泡排序:
public class 數(shù)組的排序 {public static void main(String[] args) {int data[] = new int[]{2,1,9,0,5,3,7,6,8};get(data);//外層控制排序的總次數(shù)for (int y = 0 ; y < data.length ; y++){//內(nèi)層控制每次的排序控制for (int x = 0 ; x <data.length-1 ; x++) {if (data[x] > data[x+1]){int t = data[x];data[x] = data[x+1];data[x+1] = t;}}}get(data);}//輸出數(shù)據(jù)的方法public static void get(int temp[] ){for (int i = 0 ; i < temp.length ; i++) {System.out.print(temp[i]+ "、");}System.out.println();} }?
改善設(shè)計(jì):主方法設(shè)計(jì)上是作為程序的起點(diǎn),既然是起點(diǎn),所有的代碼編寫(xiě)一定盡量簡(jiǎn)單,那么我們可以單獨(dú)定義方法進(jìn)行復(fù)雜操作。
1 public class 數(shù)組的排序 { 2 public static void main(String[] args) { 3 int data[] = new int[]{2,1,9,0,5,3,7,6,8}; 4 get(data); 5 sort(data); 6 get(data); 7 }8 //輸出數(shù)據(jù)的方法 9 public static void get(int temp[] ){ 10 for (int i = 0 ; i < temp.length ; i++) { 11 System.out.print(temp[i]+ "、"); 12 } 13 System.out.println(); 14 }
15 //負(fù)責(zé)排序的方法 16 public static void sort(int s[]){ 17 //外層控制排序的總次數(shù) 18 for (int y = 0 ; y < s.length ; y++){ 19 //內(nèi)層控制每次的排序控制 20 for (int x = 0 ; x <s.length-1 ; x++) { 21 if (s[x] > s[x+1]){ 22 int t = s[x]; 23 s[x] = s[x+1]; 24 s[x+1] = t; 25 } 26 } 27 } 28 } 29 }
?2.數(shù)組轉(zhuǎn)置
- 原始數(shù)據(jù) ? :??1 、 2 、3 、4 、5 、6 、7 、8 ?;
- ? ? ? 轉(zhuǎn)置后數(shù)據(jù) : 8 、 7 、6 、5 、4 、3 、2 、1 ? ;
?要實(shí)現(xiàn)轉(zhuǎn)置的操作有兩個(gè)思路:
定義一個(gè)新的數(shù)組,而后將原始數(shù)組按照排序的方式插入到新的數(shù)組之中,隨后改變?cè)紨?shù)組的引用;
1 public class 數(shù)組的排序 { 2 public static void main(String[] args) { 3 int data[] = new int[]{1,2,3,4,5,6,7,8}; 4 //首先定義一個(gè)新的數(shù)組,長(zhǎng)度與原始數(shù)組一致 5 int temp[] = new int[data.length]; 6 int foot = data.length -1 ; 7 //對(duì)于新的數(shù)組按照索引由小到大的順序循環(huán) 8 for (int i = 0 ; i < temp.length ; i++) { 9 temp[i] = data[foot]; 10 foot--; 11 } 12 data = temp; //data轉(zhuǎn)向temp ,而data的原始數(shù)據(jù)就成為了垃圾 13 get(data); 14 15 } 16 //輸出數(shù)據(jù)的方法 17 public static void get(int temp[] ){ 18 for (int i = 0 ; i < temp.length ; i++) { 19 System.out.print(temp[i]+ "、"); 20 } 21 System.out.println(); 22 } 23 }雖然上面的算法實(shí)現(xiàn)了轉(zhuǎn)置的操作,但是代碼里會(huì)產(chǎn)生垃圾 data的原始數(shù)據(jù)就是垃圾。
- 利用算法,再一個(gè)數(shù)組上直接完成轉(zhuǎn)置操作
- 原始數(shù)據(jù):??1 、 2 、3 、4 、5 、6 、7 、8 ?; ? ? //轉(zhuǎn)換次數(shù):數(shù)組長(zhǎng)度 ÷ 2 ?記住不管數(shù)組是技術(shù)還是偶數(shù)轉(zhuǎn)置次數(shù)一樣
- ? ? 第一次轉(zhuǎn)置: 8 、 2 、3 、4?、5?、6?、7?、1 ?;?
- ? ?第二次轉(zhuǎn)置 : 8?、 7?、3?、4?、5?、6?、2?、1 ?;
- ? ? 第三次轉(zhuǎn)置: 8?、 7?、6?、4?、5?、3?、2?、1 ? ;
- ? ?第四次轉(zhuǎn)置 : 8?、 7 、6?、5?、4?、3?、2?、1 ? ?;
轉(zhuǎn)置:
1 public class 數(shù)組的轉(zhuǎn)置 { 2 public static void main(String[] args) { 3 int data[] = new int[]{1,2,3,4,5,6,7,8,9}; 4 reverse(data); 5 get(data); 6 } 7 //負(fù)責(zé)轉(zhuǎn)置操作 8 public static void reverse(int arr[]){ 9 int start = 0; 10 int end = arr.length -1; 11 for (int i = 0; i < arr.length/2 ; i++) { 12 int temp = arr[start]; 13 arr[start] = arr[end]; 14 arr[end] = temp; 15 start ++; 16 end --; 17 } 18 } 19 //此方法負(fù)責(zé)輸出 20 public static void get(int temp[]){ 21 for(int i = 0 ; i < temp.length ; i++) { 22 System.out.print(temp [i]+"、"); 23 } 24 System.out.println(); 25 } 26 }?
轉(zhuǎn)載于:https://www.cnblogs.com/Tsukasa/p/7090900.html
總結(jié)
以上是生活随笔為你收集整理的java 数组冒泡排序、转置(降序)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: mysql xtrabackup 遭遇严
- 下一篇: 数论在计算机科学中的应用,近世代数思想方