冒泡排序——(BubbleSort)
基本思想:
在要排序的一组数里,对当前还没有排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即每当两相邻的数比较后发现他们的排序与排序要求相反时,就将他们互换。
图解:
代码:
package sort.change;
public class BubbleSort {
public static void main(String[] args) {
int[] arr = {9,8,7,6,5,4,3,2,1};
print(arr);
bubbleSort(arr);
print(arr);
}
private static void bubbleSort(int[] arr) {
// TODO Auto-generated method stub
for(int i =0;i<arr.length-1;i++){
for(int j = 0;j<arr.length-1-i;j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1]=temp;
}
}
}
}
private static void print(int[] arr) {
// TODO Auto-generated method stub
for(int o:arr){
System.out.print(o+" ");
}
System.out.println();
}
}
时间复杂度
:O(n^2).
插入排序——直接插入排序(Straight Insertion Sort)
基本思想:
将一个记录 插入到已经排序好的有序列表中,从而得到一个新,记录数增1的有序表。即:先将序列的第一个记录看成是一个有序的子序列,然后 从第二个记录逐个进行插入,直到整个序列有序为止。
Java代码:
private static void insertSort(int[] a, int length) {
// TODO Auto-generated method stub
for(int i = 1;i<length;i++){
if(a[i]<a[i-1]){
int j = i-1;//0 3
int temp = a[i];//1 2
a[i] = a[i-1];// 7
while(temp<a[j]){
a[j+1]=a[j];
j--;
if(j<0)
break;
}
a[j+1]=temp;
}
}
for(int i =0;i<length;i++){
System.out.print(a[i]+" ");
}
}
public class InsertionSort {
public static void main(String[] args) {
int[] arr = {9,8,7,6,-1,0};
print(arr);
insortSort(arr);
print(arr);
}
private static void insortSort(int[] arr) {
// TODO Auto-generated method stub
for(int i = 1;i<arr.length;i++){
int temp = arr[i];
int position = i;
for(int j = i;j>=1&&temp<arr[j-1];j--){
arr[j] = arr[j-1];
position = j-1;
}
arr[position]= temp;
}
}
private static void print(int[] arr) {
// TODO Auto-generated method stub
for(int o:arr){
System.out.print(o+" ");
}
System.out.println();
}
}
如果碰到一个和插入元素相等的,那么插入元素把想插入的元素放到相等元素后面。所以,相等元素前后顺序是不变的,从原无序序列出去的顺序就是排好序后的顺序,所以插入排序是稳定的
时间复杂度:O(n^2).
简单选择排序(Select Sort)
简介:
基本思想:
在要排序的一组数中,选出最小或者最大的一个数与第一个位置的数进行交换;然后再剩下的数当中再找出最小或者最大的与第二个位置的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个数比较为止。
算法:
package sort.select;
/**
* 选择排序
* @author 帅
*
*/
public class SelectSort {
public static void main(String[] args) {
int[] arr = {9,8,7,6,-1,0};
print(arr);
selectSort(arr);
print(arr);
}
private static void selectSort(int[] arr) {
// TODO Auto-generated method stub
for(int i =0;i<arr.length-1;i++){
int position = i;
for(int j = i+1;j<arr.length;j++){
if(arr[j]<arr[position]){
position=j;
}
}
int temp = arr[position];
arr[position]=arr[i];
arr[i] = temp;
}
}
private static void print(int[] arr) {
// TODO Auto-generated method stub
for(int o:arr){
System.out.print(o+" ");
}
System.out.println();
}
}