java 隨機(jī)正整數(shù) 排序 Java產(chǎn)生隨機(jī)數(shù)并排序
第1部分:隨機(jī)數(shù)
1.1Math.random()函數(shù)
Math.random隨機(jī)生成0~1個(gè)房間的隨機(jī)點(diǎn)數(shù),前面包含(0.00)后不包含(1)
通常沒(méi)有什么實(shí)際意義,需要轉(zhuǎn)換成整數(shù)。
例程:生成30-50的隨機(jī)數(shù)量
int t = Math.random*20 30;
1.2 Random類:
語(yǔ)法:Random r = new Random();
常用的方法:
nextInt();//在int類型取值范圍內(nèi)隨機(jī)生成整數(shù),對(duì)我們來(lái)說(shuō)意義不大。
nextInt(參數(shù));在指定范圍內(nèi)隨機(jī)生成整數(shù)(常見(jiàn))
例: nextInt(100);在0~100之間隨機(jī)生成整數(shù)。
訓(xùn)練:
雙色球生成結(jié)合數(shù)組和隨機(jī)數(shù)量完成。
需求: 紅球 1~33(包含) 在號(hào)碼中隨機(jī)生成6個(gè)不重復(fù)的號(hào)碼添加到球的數(shù)組中去藍(lán)球。 在1~16(包括)號(hào)碼中隨機(jī)生成一個(gè)號(hào)碼,擴(kuò)展到紅球數(shù)組。
分析: 球的數(shù)組 int[] bool=new int[6]
第一個(gè)球: 隨機(jī)生成一個(gè)數(shù)字,添加到數(shù)組中,后面生成的每個(gè)球都需要與前面的每個(gè)球進(jìn)行比較。只有在不重復(fù)的情況下才能添加到數(shù)組中。如果重復(fù),放棄,重新生成比較,紅球功能會(huì)在6個(gè)球全部添加到數(shù)組中時(shí)完成。藍(lán)球可以通過(guò)擴(kuò)展添加到bool數(shù)組中;
例程:DoubleColerBall.java
1 package random;
2
3 import java.util.Arrays;
4 import java.util.Random;
5
6 public class DoubleColerball {
7
8 public static void main(String[] args) {
9
10 Random r = new Random();
11
12 int[] redBall =new int[6];
13 int index = 0;
14
15 redBall[index ] = r.nextInt(33) 1; //生成第一個(gè)數(shù)字
16
17 loop: while(true) {
18
19 int x = r.nextInt(33) 1;
20
21 //判斷x的生成,是否在數(shù)組中
22 for (int j=0; j
View Code
第2節(jié)有幾種排序算法
冒泡排序算法2.1
2.1.1原理實(shí)現(xiàn)
將數(shù)列從小到大排序(或從大到小),將每個(gè)位置數(shù)與下一個(gè)位置數(shù)進(jìn)行比較。如果比后面的數(shù)字大,可以交換位置,一輪可以得到最大數(shù)字,第二輪可以得到第二大數(shù)字。...
2.1.2實(shí)例分析
例: [6,8,5,7,4]想要的最終結(jié)果是[4,5,6,7,8]
6 8 5 7 4
第一輪第一輪: 6 8 5 7 4
第一輪第二輪: 6 5 8 7 4
第三輪第一輪: 6 5 7 8 4
第四輪第一輪: 6 5 7 4 8
第二輪第一次: 5 6 7 4 8
第二輪第二輪: 5 6 7 4 8
第三輪第二輪: 5 6 4 7 8
第三輪第一輪: 5 6 4 7 8
第三輪第二輪: 5 4 6 7 8
第四輪第一次: 4 5 6 7 8
規(guī)則:輪數(shù)每增加一次,比較次數(shù)就會(huì)減少一次。
Demo2.java
View Code
2.2 選擇排序方法:
2.2.1原理實(shí)現(xiàn)
選擇排序方法:
第一趟,等待排序記錄r[1]~r[n]選擇最小的記錄,與r[1]交換;
第二趟,等待排序記錄r[2]~r[n]選擇最小的記錄,與r[2]交換;以此類推,第一趟在等待排序記錄r[i]~r[n]選擇最小的記錄,把它和r[i]交換,使有序序列持續(xù)增長(zhǎng),直至所有排序完成。
例:
最初的序列:{49 27 65 97 76 12 38}
第1趟:12和49交換:12{27 65 97 76 49 38}
第2趟:27不動(dòng) :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 完成
分析:
在設(shè)定數(shù)組中,第一個(gè)數(shù)字是最小數(shù)字。
將其與數(shù)組后面的每個(gè)數(shù)字進(jìn)行比較,如果有較小的交換兩個(gè)位置,
Demo2.java
1 package random;
2
3 import java.util.Arrays;
4 /**
5 *
6 * @項(xiàng)目名稱:JavaSEDay07m
7 * @模塊化功能:實(shí)現(xiàn)排序選擇
8 * @模塊版本:
9 * @JDKVersions:JDK 8.0
10 * @author: Kanekiyi
11 */
12 public class Demo3 {
13
14 public static void main(String [] args) {
15 int[] arr={5,9,2,807,89,88};
16 int temp=0;
17
18 //表面循環(huán)依次假設(shè)數(shù)組中的每個(gè)數(shù)是最小值。
19 for(int i=0; iarr[j]) {
25 min = arr[j];
26 minIndex = j;
27 }
28
29 }
30 //交換最小值
31 temp = arr[i];
32 arr[i] = arr[minIndex];
33 arr[minIndex] = temp;
34
35 }
36 System.out.println(Arrays.toString(arr));
37
38 }
39 }
View Code
2.3 插入排序法:
2.3.1原理實(shí)現(xiàn)
插入排序類似于整理?yè)淇伺?,將每張牌插入其它有序的牌中?/p>
插入式排序由N-1趟排序組成,對(duì)于P=1至N-1趟,插入式排序確保從位置0到位置P上的元素已經(jīng)排序。
簡(jiǎn)單來(lái)說(shuō),插入排序總共需要排序N-1次。從index為1開(kāi)始,我們將該位置的元素與之前的元素進(jìn)行比較,并將其放置在合適的位置。這樣循環(huán)下來(lái)之后,就是有序數(shù)組了。
2.3.2實(shí)例分析
Demo2.java
1 //插入排序算法
2 public static void insertSort() {
3 int[] arr = {3,6,8,4,2,2,9};
4 int[] arr2 = new int[arr.length];
5 arr2[0] = arr[0];
6 int temp=0;
7
8 for(int i=1; iarr2[k]) { //比較插入數(shù)和原數(shù)組中的數(shù)并交換位置。
14 temp = arr2[k];
15 arr2[k] = arr[i];
16 arr[i] = temp;
17 }
18 }
19 }
20 //arr2[i] = temp;
21 }
22 System.out.println(Arrays.toString(arr2));
23 }
View Code
方法更加簡(jiǎn)單。
參照:
綜合實(shí)踐:利用數(shù)組和數(shù)據(jù)結(jié)構(gòu)完成學(xué)生管理系統(tǒng)(SMS1).0)的研發(fā):
要求:1、為了保存數(shù)據(jù),建立學(xué)生數(shù)組
2、數(shù)字選擇功能通過(guò)鍵盤輸入,不同的數(shù)字完成不同的功能,需要對(duì)學(xué)生數(shù)字完成增刪功能;
代碼:SMS.java
1 package random;
2
3 import java.util.Arrays;
4 import java.util.Scanner;
5
6 /**
7 * 學(xué)生管理系統(tǒng)1.0版本
8 * @author Kanekiyi
9 * 分析:1、while 循環(huán)
10 * 2、Scannre
11 * 3、if 支系
12 * 4、數(shù)組 擴(kuò)容 縮容 遍歷
13 * String
14 * */
15
16 public class SMS {
17
18 public static void main(String[] args) {
19 System.out.println(“歡迎使用學(xué)生管理系統(tǒng)1.0版本”);
20
21 String[] students = {“劉一”,"孫二","張三","李四"};
22
23 Scanner sc = new Scanner(System.in);
24
25 while(true) {
26 System.out.println("1.加入學(xué)生 2.刪掉學(xué)生 3.修改學(xué)生 4.學(xué)生目錄 5.查詢學(xué)生 6.撤出");
27 System.out.println(“請(qǐng)輸入數(shù)字選擇功能”);
28
29 int type = sc.nextInt();
30
31 增加學(xué)生//1
32 if (type ==1) {
33 System.out.println(“請(qǐng)輸入添加學(xué)生姓名”);
34 String name = sc.next();
35 students = Arrays.copyOf(students,students.length 1);
36 students[students.length-1] = name;
37 System.out.println(“添加成功”);
38 }
39
40 //2、刪掉學(xué)生
41 if (type ==2) {
42 boolean flag = false;
43 System.out.println(“請(qǐng)輸入需要?jiǎng)h除的學(xué)生名稱”);
44 String name = sc.next();
45
46 for(int i=0; i
本文僅代表作者觀點(diǎn),版權(quán)歸原創(chuàng)者所有,如需轉(zhuǎn)載請(qǐng)?jiān)谖闹凶⒚鱽?lái)源及作者名字。
免責(zé)聲明:本文系轉(zhuǎn)載編輯文章,僅作分享之用。如分享內(nèi)容、圖片侵犯到您的版權(quán)或非授權(quán)發(fā)布,請(qǐng)及時(shí)與我們聯(lián)系進(jìn)行審核處理或刪除,您可以發(fā)送材料至郵箱:service@tojoy.com