基本排序 – 直接,选择,冒泡(一)
以从大到小排序为例.
(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中通过使得所占内存(空间)增大,而将效率增强(时间短),或者用时间换取内存变小。
鱼和熊掌不可得兼!