基本排序 -- 直接,选择,冒泡(一)

mac2024-06-01  40

基本排序 – 直接,选择,冒泡(一)

以从大到小排序为例.

(1)直接排序

(1)将第一个数与后面的数进行比较,比第一个数大的,则交换 (2)将第二个数与后面的数进行比较。比第一个数大的,则交换 (3)将第三个......

(1)直接排序

public class Sort01 { public static void main(String[] args){ // 对数组进行从大到小排序,用直接排序 // 第一个与后面的比较,比第一个数字大的都进行交换 int[] temp = {22,31,45,76,78,56,23,91,16,6}; for(int i = 0;i<temp.length;i++){ for(int j = i;j<temp.length;j++){ if(temp[i]<temp[j]){ int t = temp[i]; temp[i] = temp[j]; temp[j] = t; } } } for(int x : temp){ System.out.print(x +" "); } } }

执行结果为:

D:\Java>javac Sort01.java D:\Java>java Sort01 91 78 76 56 45 31 23 22 16 6

(2)选择排序

(1)第一遍循环,求出最大值与第一个数字进行交换 (2)第二遍循环,求出次大值与第二个数字进行交换 (3)第三遍循环,求出次次大值与第三个......

(2)选择排序

public class Sort02{ public static void main(String[] args){ // 选择排序,由大到小排列 // 先找处最大值,记录下标,与第一个数据进行交换 int[] temp = {22,31,45,76,78,56,23,91,16,6}; for(int i = 0;i<temp.length;i++){ int max = temp[i]; int index = i; for(int j = i;j<temp.length;j++){ if(max<temp[j]){ max = temp[j]; index = j; } } int t = temp[index]; temp[index] = temp[i]; temp[i] = t; } for(int x : temp){ System.out.print(x +" "); } } }

代码执行结果为:

D:\Java>javac Sort02.java D:\Java>java Sort02 91 78 76 56 45 31 23 22 16 6

(3)冒泡排序

(1)在数据之间,i 位上的数组与i+1数字进行比较,将大数字放在前面 (2)在执行第一次的操作

(3)冒泡排序

public class Sort03{ public static void main(String args[]){ // 由大到小排列,冒泡排序 // 先互两两之间进行比较,将两数之间的最大值置于前 int[] temp = {22,31,45,76,78,56,23,91,16,6}; for(int i = 0;i<temp.length;i++){ for(int j = 0;j<temp.length-i-1;j++){ if(temp[j]<temp[j+1]){ int t = temp[j]; temp[j] = temp[j+1]; temp[j+1] = t; } } } for(int x : temp){ System.out.print(x +" "); } } }

代码执行结果为:

D:\Java>javac Sort03.java D:\Java>java Sort03 91 78 76 56 45 31 23 22 16 6

冒泡排序(收敛速度快),适用于对一个数组或一个数组的某一个部分排序

(4)增强for循环

for(int x : temp){ System.out.print(x +" "); }

作用与 for 循环相同,将 temp 的一个值赋给 x,在输出,一直循环,直到 temp 中没有值。

(5)数字反转(空间换时间)

Java中很著名的思想:用空间换时间 以数字反转为例: (4)数字反转(空间小效率低)

public class Demo { public static void main(String args[]) { int[] temp = {1,2,3,4,5,6,7}; for(int i = 0;i<=temp.length/2;i++) { int t = temp[i]; temp[i] = temp[temp.length-1-i]; temp[temp.length-1-i] = t; } for(int x : temp){ System.out.print(x +" "); } } }

执行结果为:

D:\>javac Demo.java D:\>java Demo 7 6 5 4 3 2 1

(5)数字反转(效率高空间大)

public class Demo { public static void main(String args[]) { int[] temp = {1,2,3,4,5,6,7}; int[] temp1 = new int[temp.length]; for(int i = 0;i<temp.length;i++) { temp1[i] = temp[temp.length-1-i]; } for(int x : temp1){ System.out.print(x +" "); } } }

执行结果为:、

D:\>javac Demo.java D:\>java Demo 7 6 5 4 3 2 1

在Java中通过使得所占内存(空间)增大,而将效率增强(时间短),或者用时间换取内存变小。 鱼和熊掌不可得兼!

最新回复(0)