1.选择排序
//选择排序,《算法》p156
package algorithm;
public class Selection_p156{
public void sort(int[] a){
int N = a.length;//数组长度
for(int i = 0; i < N-1; i++){
for(int j = i+1; j < N; j++){
if(a[j] < a[i]){
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
}
}
for(int i = 0; i < N; i++){
System.out.println(a[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Selection_p156 test = new Selection_p156 ();
int[] a = {5,4,3,2,1};
test.sort(a);
}
}
思路
将第一个元素与剩余所有元素相比,如果有比第一个元素小的,则互换
再将第二个元素与剩余所有元素相比,如果有比第二个元素小的,则互换
……
2.插入排序
//插入排序,《算法》p1
package algorithm;
public class Insertion_p157 {
public void sort(int[] a){
int N = a.length;
for(int i = 1; i < N; i++){
for(int j = i; j > 0; j--){
if (a[j] < a[j-1])
{
int temp = a[j];
a[j] = a[j-1];
a[j-1] = temp;
}
}
}
for(int i = 0; i < N; i++){
System.out.println(a[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Insertion_p157 test = new Insertion_p157();
int[] a = {5,4,3,2,1};
test.sort(a);
}
}
思路
将第i个元素插入到前i-1个元素的适当位置中,插入过程为
当前元素小于上一个元素时,则互换位置,不小于时就开始将第i+1个元素插入到前i个元素的适当位置中。
3.冒泡排序
//冒泡排序
package algorithm;
public class Bubble {
public void sort(int[] a){
int N = a.length;
for(int i = 0; i < a.length-1; i++){
for(int j = 0; j < a.length-1-i; j++){
if (a[j] > a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(int i = 0; i < N; i++){
System.out.println(a[i]);
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Bubble test = new Bubble();
int[] a = {5,4,3,2,1};
test.sort(a);
}
}
思路
第一次循环将最大的数排到最后一个,第二次循环将第二大的数排到倒数第二个……
每次循环都从第一个元素开始相邻元素进行比较,如果当前元素比下一个元素更大,则互换,如不大于,则比较下一个和下下个元素……