/*
* 数组的排序算法*冒泡排序*选择排序*快速排序
*/
public class 选择排序和冒泡排序 {
/*
* 冒泡排序
*
* 基本思想:它重复地走访过要排序的数列,一次比较两个元素,
* 如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成
*/
static int b[]={215,345,6,64,2,23,46,4,23,56,34};
public static void maopaosort(int a[]){
for(int i=0;i<b.length-1;i++)
{
/*
* j<b.length-i-1:
* 减1:为了 避免脚标越界
* 减i:为了让外循环增加一次,内循环参数与比较的元素个数呈递减
*/
for(int j=0;j<b.length-i-1;j++)
{
if(b[j]>b[j+1])
{
/*
int temp=b[j+1];
b[j+1]=b[j];
b[j]=temp;
*/
swap(b,j,j+1);
}
}
}
}
/*
* 选择排序
*
* 基本思想:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。
*/
public static void xuanzesort(int a[])
{
//i<b.length-1
//减1:外循环的最后一个元素不需要作比较
for(int i=0;i<b.length-1;i++)
{
//内循环原理:从外循环要比较的元素的后一位元素开始,与该要比较的元素进行比较,取较大值放在前面的位置,遍历数组
for(int j=i+1;j<b.length;j++)
{
if(b[i]>b[j])
{
/*int temp=b[j];
b[j]=b[i];
b[i]=temp;
*/
swap(b,i,j);
}
}
}
}
/*
* 快速排序--基于选择排序的优化
*
* 基本思想:对于选择排序中的每一趟的比较有可能进行多次位置置换,会导致效率降低,性能下降.
* 所以 定义一个数组的变量和脚标的变量,比较的每一趟都把最小值放在该对应的变量里,内循环结束后,再确定是否要置换位置
*/
public static void kuaisusort(int a[])
{
for(int i=0;i<b.length-1;i++)
{
int num=b[i];
int index=i;
for(int j=i+1;j<b.length;j++)
{
if(num>b[j])
{
num=b[j];
index=j;
}
}
if(i!=index)
swap(b,i,index);
}
}
/*
* 排序位置置换的代码提取
*/
//由于各种排序方法里 可能会有排序位置置换,因此此段代码会重复使用多次,解决此问题把这些代码提取出来当作一个功能实现
public static void swap(int a[],int q,int w)//注意:在调用该方法时,参数q,w互换位置也可以的; 即置换思路里:顺时针/逆时针置换
{
int temp=a[q];
a[q]=a[w];
a[w]=temp;
}
public static void main(String[] args) {
//maopaosort(b);
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
System.out.println(" ");
//xuanzesort(b);
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
System.out.println(" ");
kuaisusort(b);
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+" ");
}
}
}
数组的排序算法*冒泡排序*选择排序*快速排序
最新推荐文章于 2021-02-22 00:10:09 发布