javaでよく見られる配列の検索と配列の並べ替え
3290 ワード
共通の検索方法:
第一の順序で検索します。つまり、順序によって一桁ずつ検索して、検索する数の索引(下付き)を見つけます。
データ量が大きい時、最悪の場合、コンピュータの負荷も非常に大きく、効率が低いです。
行列は順序付けされなければなりません。
方法1:発泡体の並べ替え
泡の並べ替え(Bbble sort):隣の二つの数を一つずつ比較して、前の数が後の数より小さいなら交換してください。第1ラウンドの比較が終わったら、一番小さい値は必ず最後に生まれます。各ラウンドの比較は最小値が生まれます。
配列の各数の対称の数を見つけたら、交換すればいいです。
第一の順序で検索します。つまり、順序によって一桁ずつ検索して、検索する数の索引(下付き)を見つけます。
データ量が大きい時、最悪の場合、コンピュータの負荷も非常に大きく、効率が低いです。
public static void main(String[] args) {
System.out.println(" ");
Scanner scanner = new Scanner(System.in);
int num = scanner.nextInt();
int[] arr = {2,4,6,8,10,12,14,16};
int index = find(arr,num);
if (index == -1){
System.out.println(" ");
}else {
System.out.println(" " + index);
}
}
/**
*
* @param arr
* @param num
* @return -1- ,>=0-
*/
public static int find(int[] arr,int num){
for (int i = 0;i
第二の半変換検索(二分割検索):検索の効率を最適化しました。行列は順序付けされなければなりません。
public static void main(String[] args) {
System.out.println(" ");
Scanner sc = new Scanner(System.in);
int num = sc.nextInt();
int[] arr = {2, 4, 6, 8, 10, 12, 14, 16,18};
int index = find(arr,num);
System.out.println(" " + index);
}
/**
*
* @param arr
* @param num
* @return
*/
private static int find(int[] arr,int num) {
int start = 0;
int end = arr.length-1;
int mid = (start+end)/2;
while (num != arr[mid]){
if (arr[mid] > num){
end=mid-1;
}else {
start=mid+1;
}
mid = (start+end)/2;
}
return mid;
}
配列の並べ替え:方法1:発泡体の並べ替え
泡の並べ替え(Bbble sort):隣の二つの数を一つずつ比較して、前の数が後の数より小さいなら交換してください。第1ラウンドの比較が終わったら、一番小さい値は必ず最後に生まれます。各ラウンドの比較は最小値が生まれます。
public static void main(String[] args) {
int[] a = {22, 87, 52, 11, 88, 24};
bubble(a);
write(a);
}
public static void bubble(int[] a){
for (int j = 1; j <= a.length - 1; j++) {
for (int i = 0; i <= a.length - j - 1; i++) {
if (a[i] > a[i + 1]) {
int t = a[i];
a[i] = a[i + 1];
a[i + 1] = t;
}
}
}
}
public static void write(int[] a) {
for (int i : a) {
System.out.print(i + " ");
}
}
方法2:並べ替えを選択するpublic static void main(String[] args) {
int[] a = {22, 87, 52, 11, 88, 24};
int n = a.length;
for (int i = 1;i<=n-1;i++){
//
int maxIndex = 0;
for (int j = 1; j <= n - i; j++) {
if (a[j] > a[maxIndex]) {
maxIndex = j;
}
}
//
int t = a[maxIndex];
a[maxIndex] = a[n - i];
a[n - i] = t;
}
write(a);
}
public static void write(int [] a){
for (int i :a){
System.out.print(i+" ");
}
}
方法3:逆さま配列配列の各数の対称の数を見つけたら、交換すればいいです。
public static void main(String[] args) {
int[] array = {4,6,7,8,9,20,40,50};
reverseArray(array);
printArray(array);
}
public static void reverseArray(int[] array){
for (int i = 0;i < array.length/2;i++){
int temp = array[i];
array[i] = array[array.length-i-1];
array[array.length-i-1] = temp;
}
}
public static void printArray(int[] array){
for (int i = 0;i < array.length;i++){
System.out.print(array[i] + "\t");
}
}