プログラミングが好きなあなたのように!
SpringBoot実用的なコースは学習https://edu.csdn.net/course/detail/31433
SpringCloud入門コースを学びhttps://edu.csdn.net/course/detail/31451を
序文
配列の使用方法を知ったら、いくつかの実用的な問題を解決するために、配列を以前の知識と組み合わせる必要があります。
この記事では、配列の一般的なアルゴリズム(最大化、順次検索、バイナリ検索、バブルソート、選択ソート)について学習します。
これらのアルゴリズムを習得できれば、プログラミング能力が大幅に向上します。
最大値を見つける
配列を指定して、すべてのデータの中から最大(最小)のデータを見つけます。
アルゴリズムの説明:
- 最大値変数を定義し、配列の最初のデータを最大値に割り当てます
- 配列の2番目のデータから最後まで、変数を最大値と順番に比較します。データが最大値より大きい場合は、配列のデータを最大値に割り当てます。
- 最大出力
double[] numbers = {34,44,12,77,32.8,8,22.8,12,99,50};
//1、定义最大值变量,将数组中第一个数据赋值给最大值
double max = numbers[0];
int pos = 0;
//2、从数组的第二个数据开始到最后,依次和最大值变量进行比较
for(int i = 1;i < numbers.length;i++){
//3、如果数据比最大值大,就把数组的数据赋值给最大值
if(numbers[i] > max){
max = numbers[i];
pos = i;
}
}
//4、输出最大值
System.out.println("最大值是:"+max+",位置是:"+(pos + 1));
順次検索
配列と検索するデータを指定して、配列内のデータの位置を見つけます。
アルゴリズムの説明:
- 配列、位置変数を定義し、検索する番号を入力します
- 最初から最後まで循環し、見つけたい数と比較します
- それらが等しくない場合は、次のものを見つけ、それらが等しい場合は、その位置に添え字を保存します
- 出力場所
Scanner input = new Scanner(System.in);
int[] numbers = {43,44,77,44,88};
System.out.println("输入你要找的数字:");
int num = input.nextInt();
int pos = -1;
for(int i = 0;i < numbers.length;i++){
if(num == numbers[i]){
pos = i;
break;
}
}
if(pos == -1){
System.out.println("没有找到该数");
}else{
System.out.println("该数字的位置是:"+pos);
}
バブルソート
配列を最小から最大(最大から最小)に並べ替えます。配列ペアの各データをペアで比較します。前の数値が大きい場合は、2つの数値を交換します。
アルゴリズムの説明:
- 複数ラウンドの比較
- 比較の各ラウンドで、2つの隣接するデータを比較し、大きい方のデータを後ろに交換します
アルゴリズムの分析:
- アウターループコントロール比較ラウンド(長さ-1)
- 内部ループ制御の前後の2つの数値の比較数(長さ-1の丸め数値)
- 内側のループで隣接する2つのデータを比較し、大きい方のデータを後ろに交換します
//外层循环控制比较的轮数
for(int i = 0;i < numbers.length - 1;i++){
//内层循环控制前后两个数的比较次数(长度-1-轮数)
for(int j = 0;j < numbers.length - 1 - i;j++){
//在内层循环中将相邻的两个数据进行比较,将较大的交换到后面
if(numbers[j] > numbers[j+1]){
int temp = numbers[j];
numbers[j] = numbers[j+1];
numbers[j+1] = temp;
}
}
}
ソートを選択
配列内の最大のデータを最初のデータと交換し
、2番目に大きいデータを2番目のデータと交換します
...
アルゴリズムの説明:
- 複数のラウンドに分割
- ラウンドの最大(小さい)値の位置は、毎回前のデータと交換されます
アルゴリズムの分析:
- アウターループ制御ラウンド数(長さ-1)
- 最小位置を見つけるための内部ループ制御(範囲:rounds〜length-1)
- 最小値のデータをラウンドの最初の番号と交換します
//外层循环控制轮数(长度-1)
for(int i = 0;i < numbers.length - 1;i++){
//保存该轮的第一个数的位置为最小值的位置
int min = i;
//内层循环控制找最小值位置(范围:轮数~长度-1)
for(int j = i;j < numbers.length;j++){
//找最小值的位置
if(numbers[j] < numbers[min]){
min = j;
}
}
//将最小的数据和该轮的开始位置交换
if(min != i){
int temp = numbers[min];
numbers[min] = numbers[i];
numbers[i] = temp;
}
}
バイナリ検索
二分探索は順序付けられた配列にのみ使用でき、より効率的です
アルゴリズムの説明:
- 開始位置と終了位置を定義します
- 開始位置と終了位置の間の値を見つけます
- 中央の値が探している数値よりも大きい場合は、後続の数値をすべて削除します(中央の位置を終了位置に割り当てます)
- 中央の値が探している数値よりも小さい場合は、前の数値をすべて削除します(中央の位置を開始位置に割り当てます)
- 真ん中の数字が探している数字と等しい場合、それが見つかり、クエリは終了します
- 上記のプロセスをループに書き込みます。条件の開始位置が終了位置以下です。
int[] numbers = {10,20,30,40,50,60,80};
System.out.println("输入你要找的数字:");
int num = input.nextInt();
int result = -1;
//定义开始位置
int start = 0;
//定义结束位置
int end = numbers.length - 1;
//循环进行查找,开始位置<=结束位置
while(start <= end){
//取中间的值的下标
int middle = (start + end) / 2;
//如果中间的值大于要找的数,淘汰中间数后面的所有数
if(numbers[middle] > num){
//将中间位置赋值给结束位置
end = middle - 1;
}
//如果中间的值小于要找的数,淘汰中间数前面的所有数
else if(numbers[middle] < num){
//将中间位置赋值给开始位置
start = middle + 1;
}
//如果中间数等于要找的数,就找到了,结束查询
else{
result = middle;
break;
}
}
if(result == -1){
System.out.println("没有找到!");
}else{
System.out.println("找到了!位置是:"+result);
}
終わり
この記事は終わりました。あなたがそれをマスターしたかどうかはわかりません。宿題を残して確認してください
。1。クラスには10人の生徒がいます。各生徒のスコアを入力し、最終的に平均と最高のスコアを取得します。
2. 5人の名前の配列を指定して、検索する名前を入力し、配列内での位置を見つけます。
3.長さ10の整数配列を定義し、同時に10個の初期値を指定し、配列を並べ替えます
。4。バイナリ検索を使用して、上記の配列内の数値の位置を見つけます。
5. 0〜9の乱数を取得し、長さ10の配列に格納します。乱数を繰り返してはなりません。
他のJavaの知識を学ぶ必要がある場合は、ここでJavaの概要に関する非常に詳細な知識を調べてください。