冒泡排序:是一种简单的排序算法,需要重复的访问要排序的元素序列,不断地比较相邻的元素。如果相邻的元素满足了比较的条件,如前一个数据大于(或小于)后一个数据,则交换元素的顺序,使较大(或较小)的数据向后移。同样,再使这个较大(或较小)的数据与下一个相邻的元素比较。依此类推,比较到序列的末尾,得到一个最大(最小)的值。前面剩下的元素,重复之前的操作比较。直到得到一个排好序的序列。稳定排序算法,平均算法复杂度为O(n²)。
例如:序列 3 ,1,4,2,5
由上图可知,经过四次比较,得到一个最大值5。
核心代码:
for(i=0;i<N-1;i++) {
for(j=0;j<N-i-1;j++) {
if(sortArray[j] > sortArray[j+1]) {
int temp;
temp = sortArray[j+1];
sortArray[j+1] = sortArray[j];
sortArray[j] = temp;
}
}
选择排序:简单排序算法,是从未排序的序列中,指定一个元素,用这个元素依次与剩余的元素比较,得到一个最大(或最小)元素,放在序列的首部(或尾部)。再从剩下的元素中指定一个元素,与剩下的比较,再得到一个值。依此类推,最后得到一个排好序的序列。不稳定排序算法,平均算法复杂度为O(nlgn)。
例如:序列 3 ,1,4,2,5
核心代码:
for(i=0;i<N-1;i++) {
for(j=i+1;j<N;j++) {
if(sortArray[i] > sortArray[j]) {
int temp;
temp = sortArray[j];
sortArray[j] = sortArray[i];
sortArray[i] = temp;
}
}
插入排序:也是一种简单且稳定的排序算法,平均算法时间复杂度同冒泡排序一样为O(n²)。这个算法像整理桥牌的方法一样,将每一张牌插入到其他已经有序的牌中的适当位置。可以将待排序的序列看成两个序列:一个有序序列,一个无序序列,算法的实现过程就是将无序序列中的元素插入到有序序列中,所以在插入时,需要将插入位置后面的元素后移,腾出空间放插入的元素。带插入的元素需要与有序序列中的元素比较,若小于(或大于)有序序列中的元素,则插入到该元素的左边;刚开始时,通常将第一个元素放进有序序列中。
例如:序列 3 ,1,4,2,5
核心代码:
for(i=1;i<N;i++) {
if(sortArray[i] < sortArray[i-1]) {//当前数小于前一个数
int temp = sortArray[i];//保存当前值
for(j=i-1; j>=0&&sortArray[j]>temp; j--) {
sortArray[j+1] = sortArray[j];
}
sortArray[j+1] = temp;
}
}
实现代码:
package List;
import java.util.Scanner;
/*
* from Student Qin
*/
public class Sort {
int N = 5;
int[] sortArray = new int[N];
public void sArray() {
int i;
System.out.println("请输入排序序列:");
Scanner sc = new Scanner(System.in);//从控制台中获取数据
for(i=0;i<N;i++)
sortArray[i] = sc.nextInt();
}
/*
* 冒泡排序
* from Student Qin
*/
public void bubbleSort() {
int i,j;
for(i=0;i<N;i++) {
for(j=0;j<N-i-1;j++) {
if(sortArray[j] > sortArray[j+1]) {
int temp;
temp = sortArray[j+1];
sortArray[j+1] = sortArray[j];
sortArray[j] = temp;
}
}
}
System.out.println("冒泡排序:");
printArray();
}
/*
* 选择排序
* from Student Qin
*/
public void selectSort() {
int i,j;
for(i=0;i<N;i++) {
for(j=i+1;j<N;j++) {
if(sortArray[i] < sortArray[j]) {
int temp;
temp = sortArray[j];
sortArray[j] = sortArray[i];
sortArray[i] = temp;
}
}
}
System.out.println("选择排序:");
printArray();
}
/*
* 插入排序
* from Student Qin
*/
public void insertSort() {
int i,j;
for(i=1;i<N;i++) {
if(sortArray[i] < sortArray[i-1]) {//当前数小于前一个数
int temp = sortArray[i];//保存当前值
for(j=i-1; j>=0&&sortArray[j]>temp; j--) {
sortArray[j+1] = sortArray[j];
}
sortArray[j+1] = temp;
}
}
System.out.println("插入排序:");
printArray();
}
public void printArray() {
int i;
for(i=0;i<N;i++) {
System.out.print(sortArray[i]+"\t");
}
System.out.print("\n");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
Sort st = new Sort();
st.sArray();
st.bubbleSort();
st.selectSort();
st.insertSort();
}
}
结果: