标签:最小 new math 利用 false 标识 span 最大数 循环
1.产生100个不同的随机数(0~100):
方法一:
1 // 利用空间换时间效率 ,数组直接初始化全部为0 2 int[] a = new int[n]; 3 int[] b = new int[n+1]; 4 for(int i = 0;i < n;) 5 { 6 int x = (int) (Math.random()*101); 7 //当b数组当前下标值为0时就把下标赋给a数组,并且把b值为1,进行下一个赋值 8 //当b的数组对应数为1时说明此下表已经用过,返回去重新产生随机数,这时候i没有自加 9 if(0 == b[x]) 10 { 11 a[i] = x; 12 b[x] = 1; 13 i++; 14 } 15 }
方法二:
1 int[] a = new int[n]; 2 for(int i = 0;i < n;) 3 { 4 int x = (int) (Math.random()*101); 5 int j = 0; 6 //此for用于和前面已经产生的数进行比较。如果相等就跳出循环在这个位置重新产生随机数。 7 for(;j < i;j++) 8 { 9 if(x == a[j]) 10 11 { 12 break; 13 } 14 } 15 //当此条件下说明说明没有重复数,进行赋值,并且向后移一位。 16 if(j >= i) 17 { 18 a[i] = x; 19 i++; 20 } 21 }
1.冒泡排序:
方法一:
1 int temp = 0; 2 // 循环n-1次 3 for(int i = 0;i < n-1;i++) 4 { 5 //每一次会确定一个数,所以比较的数会逐渐减少 6 for(int j = 0;j < n-1-i;j++) 7 { 8 if(a[j] > a[j+1]) 9 { 10 temp = a[j]; 11 a[j] = a[j+1]; 12 a[j+1] = temp; 13 } 14 } 15
}
方法二:
1 //利用两次循环:每一次下去找出最大数,然后从下往上时找到最小的数。 2 //外for控制循环的此数 。tag用于标识。 3 for(int i = 0;i < n-1;i++) 4 { 5 tag = true; 6 //DOWN 7 for(int j = i;j < n-1-i;j++)//注意j的范围 8 { 9 if(a[j] > a[j+1]) 10 { 11 temp = a[j]; 12 a[j] = a[j+1]; 13 a[j+1] = temp; 14 tag = false; 15 } 16 } 17 if(tag) break; //此处tag未变,说明已经有序,无需再排。 18 tag = true; //否则把tag改为true 19 //UP 20 for(int j = n-2-i;j > i;j--) 21 { 22 if(a[j] < a[j-1]) 23 {25 temp = a[j]; 26 a[j] = a[j-1]; 27 a[j-1] = temp;
tag = false; 28 } 29 } 30 if(tag) break; 31 }
标签:最小 new math 利用 false 标识 span 最大数 循环
原文地址:https://www.cnblogs.com/YangK123/p/12348573.html