[- package com.itcase.test;
- /**
- * 2、求出1-100之间的素数,假设有n个,将这些素数存入a[n+1]的数组中。(其中n个是求出的各个素数,还有一个是随机添加其中的一个素数)
- * 这样数组中就有相同的两个素数,写一个搜索算法,找出数组中相同的那个素数。(随机添加的素数,可手动指定,也可利用随机方法产生)
- * (注:存入数组后,数组中的所有元素理论上是无序的,相同的那个素数不一定就等于a[n],而是被存入了数组中的某个角标上)
- */
- import java.util.ArrayList;
- import java.util.List;
- public class SearchPrime {
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int reslut = new SearchPrime().searchPrime(100);
- System.out.println(reslut);
- }
-
- /**
- * 判断一个整形数据是否为质数
- * @param prime
- * @return 是否为质数
- */
- public boolean isPrime(int prime)
- {
- boolean flag = false;
- if(prime == 2)
- flag = true;
- if(prime > 2)
- {
- int i = 2;
- for(; i <= (int)Math.sqrt(prime);i++)
- {
- if(prime%i == 0)
- {
- flag = false;
- break;
- }
- }
- if(i>(int)Math.sqrt(prime))
- {
- flag = true;
- }
-
- }
-
- return flag;
- }
- /**
- * 将100中的素数加入数组,并在数组的随机位置上添加了一个100以内的随机质数
- * @param parma
- * @return
- */
- public int[] getPrime(int parma)
- {
- List<Integer> list = new ArrayList<Integer>();
- for(int i = 2;i<= parma; i++)
- {
- if(isPrime(i))
- {
- list.add(i);//将为素数的元素加入List集合
- }
- }
- int[] primes = new int[list.size()+1];
- //random1获得一个List中的一个随机索引
- int random1 =(int)(Math.random()*list.size()+1);
- //random2将list中获得的一个随机的数加入数组中的速记位置;
- int random2 =(int)(Math.random()*list.size()+1);
-
- for(int i = 0; i < list.size()+1; i++)
- {
- if(i<random2)
- {
- primes[i] = list.get(i);//
- }else
- if(i==random2)
- primes[i] = list.get(random1);
- else primes[i] = list.get(i-1);
-
- }
- return primes;
- }
-
- /**
- * 通过快速排序方法将数组排序,并对数组中存在加入的质数找到
- * @param parma
- * @return 返回那个素数
- */
- public int searchPrime(int parma)
- {
- int result = 0;
- int []primes = this.getPrime(parma);
- this.quickSort(primes, 0, primes.length -1);
- for(int i = 0; i< primes.length; i++)
- {
- if(primes[i] == primes[i+1])
- {
- result = primes[i];
- break;
- }
- }
- return result;
- }
-
- /**
- * 实现数组内两个数值交换
- * @param a对应的数组
- * @param i数组的下标
- * @param j数组的下标
- */
- public void change(int a[], int i, int j)
- {
- if(i==j)
- {
- return;
- }
- int tmp = a[i];//实现交换
- a[i] =a[j];
- a[j] = tmp;
- }
-
- /**
- *
- * @param arr 带排序的数组
- * @param low
- * @param height
- * @return i
- */
- public int partition(int arr[],int low,int height)
- {
- //当前位置为第一个元素所在位置
- int p_pos = low;
- //采用第一个元素为轴
- int pivot = arr[p_pos];
-
- for (int i = low + 1; i <= height; i++) {
-
- if (arr[i] < pivot) {
-
- p_pos++;
-
- change(arr, p_pos, i);
-
- }
-
- }
-
- change(arr, low, p_pos);
-
- return p_pos;
-
- }
- /**
- * 实现快速排序
- * @param arr
- * @param low
- * @param high
- */
- public void quickSort(int arr[], int low, int high)
- {
- if(low < high)
- {
- int pivot = partition(arr, low, high);
- //System.out.println(pivot);
- quickSort(arr, low, pivot-1);
- quickSort(arr, pivot+1, high);
- }
- }
- }
复制代码 |