点击可进行跳转至
冒泡排序
将一个乱序的数组进行排序,默认排升序
假设数组有n个元素,每进行一次遍历,就会把一个元素放在它的最终位置,它要到达最终位置,就要和每个元素进行比较,寻找那个最大的值,放在末尾,此时最后这个位置已经有了它的归属,当排序下个元素时,就无需遍历已经有归属的位置。
详细代码附上:(内含注释)
import java.util.Arrays;
public class Test2 {
public static void main(String[] args) {
int[] arr = {3,4,5,1,2};
bubbleSort(arr);
for(int i : arr){
System.out.println(i);
}
}
public static void bubbleSort(int[] arr){
//需要将几个元素放到他们应该在的位置,
// 减1的 作用是:当还剩下一个数的时候,其他数都已经排序好,这个数就在它该在的位置
for (int i = 0; i < arr.length-1; i++) {
//在放一个元素的时候,需要遍历数组进行比较
for (int j = 0; j < arr.length-1-i; j++) {
if(arr[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
数组的数字排列问题
给定一个整型数组,将所有的偶数放在前半部分,将所有的奇数放在后半部分
例如:
{1,2,3,4,5,6,7,8}
调整后得到
{8,2,6,4,5,3,7,1}
思路:双引用,从前向后寻找到第一个奇数停止,从后向前寻找到第一个偶数停止,把这两个数一换就可以了。
package Array;
/**
* 给定一个整型数组,将所有的偶数放在前半部分,将所有的奇数放在后半部分
*/
public class OddEven {
public static void main(String[] args) {
int[] arr = {1,2,3,4,5,6,7,8};
oddEven(arr);
for (int i : arr){
System.out.println(i);
}
}
public static void oddEven(int[] arr){
int left = 0;
int right = arr.length-1;
while (left < right){
while (left < right && arr[left] % 2 == 0){ //找奇数
left++;
}
while (left < right && arr[right] % 2 != 0){ //找偶数
right--;
}
int temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
}
看到上面找奇数和找偶数的判断条件时,可能会有疑惑?
为什么要加left<right
呢?
是因为若数组内部全是奇数,或者全是偶数,left
和 right
要有限制条件,否则数组就会越界。
要是对大家有所帮助的话,请帮我点个赞吧。