冒泡排序在
发现比它小的时候就交换,选择排序只有在确定了最小的数据之后,才会发生交换。
插入排序速度比冒泡排序速度快一倍,比选择排序速度还快些。
冒泡排序:
第一种方式:
int[] arr = new int[] { 22, 55, 44, 66, 33, 11, 77, 99, 88 ,0};
int count = 0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length - i -1; j++) {
if (arr[j] > arr[j + 1]) {
count++;
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
System.out.println("count:"+count);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
第二种方式:
int[] arr = new int[] { 22, 55, 44, 66, 33, 11, 77, 99, 88 ,0};
int x,y;
int count = 0;
for (x = arr.length-1;x>0;x--) {
for (y=0;y<x;y++) {
if(arr[y]>arr[y+1]){
count++;
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
System.out.println("count:"+count);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
得到结果:
count:19
0
11
22
33
44
55
66
77
88
99
选择排序:
int[] arr = new int[] { 22, 55, 44, 66, 33, 11, 77, 99, 88 ,0};
int count = 0 ;
for (int i = 0; i < arr.length; i++) {
int min = i; /* 将当前下标定义为最小值下标 */
for (int j = i+1; j < arr.length; j++) {
if(arr[min]>arr[j]){ /* 如果有小于当前最小值的
关键字 */
count++;
min = j; /* 将此关键字的下标赋值给min */
}
}
if(i!=min){/* 若min不等于i,说明找到最小值,交换 */
int tmp = arr[min];
arr[min] = arr[i];
arr[i] = tmp;
}
}
System.out.println("count:"+count);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
得到结果:
count:13
0
11
22
33
44
55
66
77
88
99
插入排序:
int[] arr = new int[] { 22, 55, 44, 66, 33, 11, 77, 99, 88 ,0};
int in,out;
for (out =1 ; out < arr.length; out++) {
int temp = arr[out];
in = out;
while (in>0 && arr[in-1]>temp) {
arr[in] = arr[in-1];
--in;
}
arr[in] = temp;
}
for (int k = 0; k < arr.length; k++) {
System.out.println(arr[k]);
}