1. 冒泡排序
循环n次,每次在array.length中相邻两个做比较,排在最后的数是最大的元素,所以下一次循环就不用比较最后的数,较小的数渐渐浮到前面。
public static int[] bubbleSort(int[] array)
{
if(array.length > 0)
{
for(int i=0; i<array.length; i++)
{
for(int j=0; j<array.length-i-1; j++)
{
if(array[j]>array[j+1])
{
swap(array,j,j+1);
}
}
}
}
return array;
}
public static void swap(int []array,int a, int b)
{
int temp = array[a];
array[a] = array[b];
array[b] = temp;
}
public static void main(String[] args) {
int a[]={2,5,3,1};
bubbleSort(a);
for(int b:a)
System.out.println(b);
}
2. 选择排序
设array[0]是min, 0是minIndex ,循环n-m次,找出minIndex,array[minIndex]依次放到排好的序列后面。
其实就是按照i循环n次,每次把array[i]设为最小值,和未排的序列比较,找到最小的array[index],再和array[i]交换。
public class selectionSort {
public static int[] selectionSort(int []array)
{
if(array.length > 0)
{
for(int i=0; i<array.length; i++)
{
int minIndex = i;
for(int j =i; j<array.length; j++)
{
if(array[j]<array[minIndex])
minIndex = j;
}
if(minIndex != i)
{
swap(array,i,minIndex);
}
}
}
return array;
}
public static void swap(int []array,int a, int b)
{
int temp = array[a];
array[a] = array[b];
array[b] = temp;
}
public static void main(String[] args) {
int a[]={0,5,3,1};
selectionSort(a);
for(int b:a)
System.out.println(b);
}
}
3. 插入排序
思想就是:
- 第一个元素认为已经被排序
- 取出下一个元素在已经排好序的元素中扫描,找到合适的位置插入
- 如果该元素current小于已排序的元素,已排序的元素往后移,腾出一个地给current,直到找到一个比current小的元素,放到它后面。
- 不用swap函数,直接赋值,array[index+1] = array[index]
public class insertSort {
public static int[] insertSort(int []array)
{
if(array.length > 0)
{
for(int i=0; i<array.length-1 ;i++)
{
int current = array[i+1]; //从第二个数开始比较
int index = i;
while(index>=0 && current <array[index])//如果current比排好序中的最后一个数小,进入循环
{
array[index +1] = array[index];//排好序中的每个数往后移,给current腾地儿。直到找到一个数比current小,放到那个数后面。
index--;
}
array[index+1] = current;//如果current比排好序中的最后一个数大,直接把current放到数组后一位。
}
}
return array;
}
public static void main(String[] args) {
int a[]={-1,5,3,1};
insertSort(a);
for(int b:a)
System.out.println(b);
}
}