产生不同的随机数并且采用冒泡排序。

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 }

猜你喜欢

转载自www.cnblogs.com/YangK123/p/12348573.html