定义
排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。
1 冒泡排序
原理:对于一个有n-1个元素的数组,通过相邻元素进行相互比较,如果前者大于后者(从小到大排序),就进行交换,重复n-1次。每次交换就会把当前还没排好序的元素中的最大值换到它数组尾部对应的位置。(从小到大排序)
代码:
package SortingAlgorithm;
public class BubbleSortDemo {
public static void main(String[] args) {
int a[] =new int[] {1,5,3,4,62,356,7,34,35455,89,12};
BubbleSort(a,0,a.length-1);
for(int i=0;i<=a.length-1;i++)
System.out.print(a[i]+" ");
int b[] =new int[] {1,5,3,4,62,356,7,34,35455,89,12,56};
System.out.println();
BubbleSort(b,0,b.length-1);
for(int i=0;i<=b.length-1;i++)
System.out.print(b[i]+" ");
}
//排序方法
public static void BubbleSort(int a[],int b,int c ) //参数: 要排序的数组,起始点,终点
{
for(int i=0;i<c-b;i++) //执行n-1 次交换 ,b到c就执行c-b次
{
for(int j=b;j<c-i;j++) //一次交换排好一个数据,这个数据就不用参与交换了
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
public static void BubbleSort2(int a[],int b,int c) //优化冒泡排序,如果有一次交换完全没发生数据的交换,那就说明排序完成了
{
boolean isChange=false;//记录是否发生了交换
for(int i=0;i<c-b;i++) //执行n-1 次交换 ,b到c就执行c-b次
{
for(int j=b;j<c-i;j++) //一次交换排好一个数据,这个数据就不用参与交换了
{
if(a[j]>a[j+1])
{
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
isChange=true;
}
}
if(!isChange)
{
break;//如果没发生交换,就退出
}
else {
isChange=false; //重置isChange
}
}
}
}
2 选择排序
原理:对于一个a[n]数组,第一次排序 :在 a[0]--a[n-1]中选择最小的元素与a[0] 交换 ,第二次排序:在a[1] --a[n-1]中选择最小元素与a[1]交换 第三次排序:在a[2]--a[n-1]中选择最小元素与a[2]交换...............第n-1次交换:在a[n-2]--a[n-1]中选择最小元素与a[n-2]交换。突出一个“交换”。(从小到大排序)
代码:
package SortingAlgorithm;
public class SelectSortDemo {
public static void main(String[] args) {
int a[] =new int[] {1,5,3,4,62,356,7,34,35455,89,12};
SelectSort(a,0,a.length-1);
for(int i=0;i<=a.length-1;i++)
System.out.print(a[i]+" ");
}
public static void SelectSort(int a[],int b,int c) //排序方法 参数 1 要排序的数组 2 起始点 3 终点
{
for(int i=b;i<=c-1;i++)
{
int temp=i;//记录最大值的下标
for(int j=i+1;j<=c;j++) //在后面找最小值
{
if(a[j]<a[temp])
temp=j;
}
if(temp!=i) //找到更小的值就交换
{
int temp2=a[i];
a[i]=a[temp];
a[temp]=temp2;
}
}
}
}