1.定义一个方法,找出int数组中,最小值的索引下标
public class Demo2 {
public static void main(String[] args) {
int[] arr = {98, 19, 78, 12, 199,87};
int a = getMInIndexInArray(arr);
System.out.println(a);
}
public static int getMInIndexInArray (int[] arr) {
int minIndex = 0;
for (int i = 1; i < arr.length; i++) {
if (arr[minIndex] > arr[i]) {
minIndex = i;
}
}
return minIndex;
}
}
2.定义一个方法,在指定的int数组中找出指定的数据第一次出现的下标
[1,2,3,4,5,2] 找 2在数组中第一次出现的下标 1
public class Demo4 {
public static void main(String[] args) {
int[] arr = {1,2,3,4,2,3,2};
indexOf(arr, 4);
}
/**
* 获取指定数据在数组中第一次出现的下标
* @param arr 目标数组 在这个数组中找
* @param find 目标数据 要找这个数
*/
public static void indexOf (int[] arr, int find) {
int index = -1;//找到指定值的下标 赋值给一个变量 下标不可能是一个-1的就代表没有
for (int i = 0; i < arr.length; i++) {
if (arr[i] == find) {
index = i;
break;//终止循环
}
}
System.out.println(index);
}
}
3.在一个数组中,找出所有指定数据的下标位置 【难】
import java.util.Arrays;
public class Demo6 {
public static void main(String[] args) {
int[] arr = { 1, 2, 3, 2, 2, 8, 2, 89, 2 };
int[] arr1 = getAllIndexes(arr, 2);
System.out.println(Arrays.toString(arr1));
}
public static int[] getAllIndexes(int[] arr, int find) {
// 在一个数组中,找出所有指定数据的下标位置 【难】
int count = 0;// 计数器的思想
// 指定一个数据 2 以上的数组中的下标 ===》[1, 3, 5]
// 将找到下标存到数组中
// 声明一个空的数组
int[] indexes = new int[arr.length];// [0,0,0,0,0,0]
/**
* i=0 0<4 true if 2==arr[0] 2==1false i++ i=1 1<4 true if 2==arr[1] 2==2 true
* indexes[0] = 1 ==>indexes=[1,0,0,0] i++ i=2 2<4 true if 2==arr[2] 2==3 false
* i++ i=3 3<4 true if 2==arr[3] 2==2true indexes[1] = 3===>index=[1,3,0,0] i++
* i=4 4<4 false 循环
*/
for (int i = 0; i < arr.length; i++) {
if (find == arr[i]) {
indexes[count++] = i;
}
}
// System.out.println(Arrays.toString(indexes));//[1,3,0,0]==>[1,3]
// 咱们再弄一个一个空的数组,这个数组的容量是 count
// System.out.println(count);
int[] newIndexes = new int[count];// [0,0]
/**
* i=0 0<2 true newIndexes[0] = indexes[0]=>newIndexes[0]= 1==>[1,0] i++ i=1 1<2
* true newIndexes[1] = indexes[1]=>newIndexes[1] = 3==>[1,3] i++ i=2 2<2 false
* 循环结束 newIndexes = {1,3}
*/
for (int i = 0; i < newIndexes.length; i++) {
newIndexes[i] = indexes[i];
}
return newIndexes;
}
}
4.完成一个方法,替换掉数组中所有元素为0的元素,替换为指定元素 [1,2,3,0,0,0]
import java.util.Arrays;
public class Demo7 {
public static void main(String[] args) {
//完成一个方法,替换掉数组中所有元素为0的元素,替换为指定元素 [1,2,3,0,0,0]
int[] arr = {1,2,3,0,0,0};
for (int i = 0; i < arr.length; i++) {
if (0 == arr[i]) {
arr[i] = 250;
}
}
System.out.println(Arrays.toString(arr));
}
}
5.完成一个方法,删除指定下标的元素,要求从删除位置开始,之后的元素整体前移。【难】
import java.util.Arrays;
public class Demo9 {
public static void main(String[] args) {
int[] arr = { 0, 1, 2, 3, 4 };
remove(arr, 2);
}
public static void remove(int[] arr, int index) {
// 删除下标为2的
/**
* i=2 2<4 arr[2] = arr[3] ===> {0,1,3,3,4} i++ i=3 3<4 arr[3] = arr[4]
* ===>{0,1,3,4,4} i++ i=4 4<4 false 循环结束 arr[4] = 0; arr={0,1,3,4,0}
*/
for (int i = index; i < arr.length - 1; i++) {
arr[i] = arr[i + 1];
}
arr[arr.length - 1] = 0;
System.out.println(Arrays.toString(arr));// ={0,1,3,4,0}
}
}
6.完成一个方法,添加指定元素到指定下标位置,要求从指定下标位置之后的元素,整体向后移动。【难】
import java.util.Arrays;
public class Demo10 {
public static void main(String[] args) {
//完成一个方法,添加指定元素到指定下标位置,
//要求从指定下标位置之后的元素,整体向后移动。【难】
int[] arr = {1,2,3,4,5,0};
//下标为2的地方添加一个数据 15
//第一步:{1,2,3,4,5,5}
//第二步: {1,2,3,4,4,5}
//第三步:{1,2,3,3,4,5}
//{1,2, 15, 3,4 ,5}
for (int i = arr.length - 1; i > 2; i--) {
arr[i] = arr[i - 1];
}
arr[2] = 15;
System.out.println(Arrays.toString(arr));
}
}
7.找出数组中最大的元素,放到下标为0的位置
import java.util.Arrays;
import org.ietf.jgss.Oid;
public class Demo13 {
public static void main(String[] args) {
int[] arr = {1, 9, 11, 2};
change(arr);
}
public static void change(int [] arr) {
//找出数组中最大的元素,放到下标为0的位置 {11, 9, 1, 2}
//咱们借助于下标
int index = 0;//接收最大值的下标的一个变量
for (int i = 1; i < arr.length; i++) {
if (arr[index] < arr[i]) {
index = i;
}
}
System.out.println(index);// 2
// arr[0] 和arr[2] 交互位置
//定义一个中间变量
int temp = arr[index]; //int temp = 11
arr[index] = arr[0];// arr[2] = 1 {1,9,1,2}
arr[0] = temp;// arr[0] = 11 ==> {11, 9,1, 2}
System.out.println(Arrays.toString(arr));
}
}
8.在上一道题的基础上,不考虑下标为0的元素。 找出数组中剩余最大的元素,放到下标为1的位置
import java.util.Arrays;
public class Demo15 {
public static void main(String[] args) {
int[] arr = {1, 2, 11, 9};
//找出数组中最大的元素,放到下标为0的位置 {11, 9, 1, 2}
//咱们借助于下标
int index = 0;//接收最大值的下标的一个变量
for (int i = 1; i < arr.length; i++) {
if (arr[index] < arr[i]) {
index = i;
}
}
System.out.println(index);// 2
// arr[0] 和arr[2] 交互位置
//定义一个中间变量
int temp = arr[index]; //int temp = 11
arr[index] = arr[0];// arr[2] = 1 {1,9,1,2}
arr[0] = temp;// arr[0] = 11 ==> {11, 9,1, 2}
System.out.println(Arrays.toString(arr));//[11, 2, 1, 9]
//不考虑下标为0的元素。 找出数组中剩余最大的元素,放到下标为1的位置
int index1 = 1;
for (int i = 2; i < arr.length; i++) {
if (arr[index1] < arr[i]) {
index1 = i;
}
}
System.out.println(index1);//3 arr[1] = arr[3] arr[3] = arr[1]
int temp1 = arr[index1];
arr[index1] = arr[1];
arr[1] = temp1;
System.out.println(Arrays.toString(arr));
int index2 = 2;
for (int i = 3; i < arr.length; i++) {
if (arr[index2] < arr[i]) {
index2 = i;
}
}
System.out.println(index2);//3 arr[1] = arr[3] arr[3] = arr[1]
int temp2 = arr[index2];
arr[index2] = arr[2];
arr[2] = temp2;
System.out.println(Arrays.toString(arr));
}
}
9.排序问题
9.1选择排序
原理: 找到最小值的索引 , 然后和第一个数据进行交换。。再除了第一个的剩余的数据的最小值索引然后和第二个数据进行交换。以此类推即可
int[] = {4,3 ,2,1}
先遍历一遍 找到 最小值的索引 3 然后交换位置 {1, 3, 2, 4}
再遍历一遍(除了第一个数) 找最小值的索引 2 然后交换位置 {1, 2, 3,4}
再遍历一遍(除了第前两个数) 找最小值的索引 {1, 2, 3,4}
import java.util.Arrays;
public class Demo16 {
public static void main(String[] args) {
//选择排序
int[] arr = {4, 3, 2, 1};
/**
* i=0 0<3 minIndex=0 进入内层的for循环
* j=1 1<4 true if arr[0]>arr[1] 4>3 true minIndex=1 j++
* j=2 2<4 true if arr[1]>arr[2] 3>2 true minIndex=2 j++
* j=3 3<4 true if arr[2]>arr[3] 2>1 true minIndex=3 j++
* j=4 4<4 false 内层循环结束
* //交换位置
* int temp = 4 arr[0] = arr[3] ==>{1,3,2,1}
* arr[3] = 4====>{1,3,2,4} i++
* i=1 1<3 minIndex = 1 进入内层的for循环
* j=2 2<4 true if arr[1] >arr[2] 3>2 true minIndex = 2 j++
* \ j=3 3<4 true if arr[2] >arr[3] 2>4 false minIndex = 2 j++
* j=4 4<4 false 内层循环结束
* //交换位置
* int temp = 3 arr[1]=arr[2] ==>{1,2,2,4}
* arr[2] = 3 ===>{1,2,3,4} i++
* i= 2 2<3
*
*
*/
for (int i = 0; i < arr.length - 1; i++) {//控制轮数
int minIndex = i;//最小值的索引的变量
for (int j = i + 1; j < arr.length; j++) {//遍历按数据比较大小然后取 最小值的索引
if (arr[minIndex] > arr[j]) {
minIndex = j;
}
}
//交换位置
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
9.2冒泡排序
原理: 比较两个相邻的元素的大小,如果左边比右边大,就交换位置。每一对都要比较
int[] arr = {1, 5, 2,3};
第一轮: for
{1, 5,2,3} 比较1和5
{1,2,5,3}比较5和2
{1,2,3,5}比较的是5和3
第二轮:
{1,2,3,5} 比较 1和2
{1,2,3,5} 比较2 和3
第三轮:
{1,2,3,5} 比较1和2
import java.util.Arrays;
public class Demo17 {
public static void main(String[] args) {
int[] arr = {1,5, 3, 2};
for (int i = 0; i < arr.length - 1; i++) {//轮数
for (int j = 0; j < arr.length - i - 1; j++) {
//两两比较,然后如果左边比右边大的话,就交换位置
if (arr[j] > arr[j + 1]) {
//交换位置
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println(Arrays.toString(arr));
}
}