冒泡排序
排序:选择排序、插入排序、快速排序
冒泡排序:升序
1、相邻两数比较,小的在前,大的在后,如果不符合条件,就交换;
2、直到不需要再交换为止
len = 6
第一趟:比较5次,挑出1个最大数;
第二趟:比较4次(5个数),
第三趟:比较3次(4个数),
第四趟:比较2次(3个数),
第五趟:比较1次(2个数),
外层循环范围:趟数 i [0,4];
内层循环范围:比较的次数 j [0,4-i];
int[] nums = { 13, 2, 45, -23, 29, 100 }; int len = nums.length; for (int i = 0; i < len - 1; i++) { for (int j = 0; j < len - 1 - i; j++) { // 相邻比较,不符合则交换 if (nums[j] > nums[j + 1]) { int temp = nums[j]; nums[j] = nums[j + 1]; nums[j + 1] = temp; } } } for (int i : nums) { System.out.print(i + " "); }
插入:
public class Test4 { public static void main(String[] args) { /** * 1.确定插入点的为止, * 2.[len-2,index]依次往后移 * 3.nums[index]=n */ int[] nums = new int[7]; nums[0] = 12; nums[1] = 23; nums[2] = 36; nums[3] = 60; nums[4] = 98; nums[5] = 102; int n = 48; int len=nums.length; //1.确认插入点的位置index int index = nums.length - 1; for (int i = 0; i < nums.length - 1; i++) { if (nums[i] > n) { index = i; break; } } //2.[len-2,index]依次往后移 for (int i = len-2; i>=index; i--) { nums[i+1]=nums[i]; } //3.nums[index]=n nums[index]=n; for (int i : nums) { System.out.print(i+" "); } } }
作业
/*
* 一组乱序的字符序列m,b,p,f,a,u,z,
* 请用冒泡排序算法,使之按字母表顺序排列
*/
public class GoHome {
public static void main(String[] args) {
char[] nums = { 'm', 'b', 'p', 'f', 'a', 'u', 'z' };
int len = nums.length;
for (int i = 0; i < len - 1; i++) {
boolean flag = true;// true 交换 false 没有交换
for (int j = 0; j < len - 1 - i; j++) {
if (nums[j] > nums[j + 1]) {
char temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
flag = false;
}
}
if (flag) {
break;
}
}
for (char c : nums) {
System.out.print(c + " ");
}
}
}
/*
*一组有序的字符序列a,b,c,e,f,p,u,z,
* 向次字符序列中插入一个新的字符,要求插入之后字符序列仍保持有序
*/
import java.util.Scanner;
public class GoHome1 {
public static void main(String[] args) {
char[] nums= {'a','b','c','e','f','p','u','z'};
char[] numn = new char[9];//开一个新的数组
Scanner sc = new Scanner(System.in);
System.out.print("请输入一个字符:");
char a= sc.next().charAt(0);
int len = nums.length;//空间长度
int index = nums.length-1;
for (int i = 0; i < nums.length-1; i++) {
if(nums[i]>a) {
index = i;
break;
}
}
for (int i = 0; i <=index-1; i++) {//[0,index] 之前的数
numn[i]=nums[i];
}
numn[index]=a;
for (int i = index; i <=len-1 ; i++) {//[index,len-1]的数
numn[i+1] = nums[i];
}
for (char c : numn) {
System.out.print(c+" ");
}
}
}
/*
* 判断一个数组是否有序
*
*/
public class GoHome2 {
public static void main(String[] args) {
int[] nums = { 1, 2, 3, 4, 5, 6 };
int len = nums.length;
int count = 0;
int count1 = 0;
for (int i = 0; i < len - 1; i++) {
if (nums[i] > nums[i + 1]) {
count++;
}
if (nums[i] < nums[i + 1]) {
count1++;
}
}
if (count == len - 1 || count1 == len - 1) {
System.out.println("此数组为有序数组");
} else {
System.out.println("此数组为不有序数组");
}
}
}
/*
* 判断一个数组是否有序
*
*/
public class GoHome23 {
public static void main(String[] args) {
int[] nums = { 1, 2, 3, 4, 5, 6 };
int len = nums.length;
boolean flag = false;
if (nums[0] > nums[nums.length - 1]) {
for (int i = 0; i < len - 1; i++) {
if (nums[i] < nums[i + 1]) {
flag = true;
break;
}
}
} else {
for (int i = 0; i < len - 1; i++) {
if (nums[i] > nums[i + 1]) {
flag = true;
break;
}
}
}
if (!flag) {
System.out.println("此数组为有序");
} else {
System.out.println("此数组为无序");
}
}
}