java中常用的几种排序算法
public class Sort {
//冒泡排序
/**
* 核心思想:
* 比较两个元素,如果前一个元素比后一个元素大则进行交换,经过对每个元素的
* 比较,最后将大的元素设置成最后一个元素。重复该动作,最后形成从小到大的排序。
* @param arr
*/
public static void bubbleSort(long arr[])
{
int i;
long temp;
//减去1是因为如果长度为7,则只需要循环6次就行了,前六次已经把排好
for(i=0;i<arr.length-1;i++)
{ //减去i是因为冒泡排序每次都把最大的排到最后,外层循环到第几次,就有排好的几个,所以要减去最后
//把前面开始进行冒泡排好
for(int j=0;j<arr.length-i-1;j++)
{ //互换
if(arr[j]>arr[j+1])
{
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
//升级的冒泡排序
public static void BubbleSort(long arr[])
{
int i,flag;
long temp;
flag = 1;//flag:1表示排序没有结束,0表示排序已经结束
for(i=0;i<(arr.length-1)&&(flag==1);i++)
{
for(int j=0;j<arr.length-i-1;j++)
{
flag = 0;//如果以后的循环不改变flag的值,说明没有发生数组元素的交换
//也就是说,这个数组已经排好序了。所有就可以提前退出循环。
if(arr[j]>arr[j+1])
{
flag = 1;
temp = arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
//选择排序
/**
* 扫描所有的元素,得到最小的元素,并将最小的元素与最左边的第一个元素进行交换。
* 再次扫描除第一位的所有元素,得到最小的元素,与左边第二个元素进行交换,以此类推
* @param arr
*/
public static void selectSort(long arr[])
{ long temp=0;;
int min=0;
for(int i=0;i<arr.length-1;i++)
{ //默认第一个数据最小
min=i;
for(int j=i+1;j<arr.length;j++)
{
if(arr[j]<arr[min])
{
min=j;
}
}
temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
//插入排序
/**
* 抽出一个元素,在其前面找到合适的位置进行插入
* @param arr
*/
public static void insertSort(long arr[])
{
long select = 0;
for(int i=1;i<arr.length;i++)
{ //默认抽出的那个是第二个元素
select = arr[i];
int j = 0;
//(arr[j-1]>select)这个是只要跟前面的那个一对比,如果发现了比前面的小,就继续往前推
for(j=i;j>0&&(arr[j-1]>select);j--)
{
arr[j] = arr[j-1];
}
arr[j] = select;
}
}
}