Java-冒泡排序、快速排序、插入排序、快速排序

来源:互联网 发布:网络词地表是什么意思 编辑:程序博客网 时间:2024/05/16 12:35
/**
 * 功能演示各种排序法
 * 1:冒泡排序 Bubble
 * 2:快速排序 Select
 * 3:插入排序 InsertSort
 * 4:快速排序 QuickSotrt
 * 引用: 类中形参变量当做应用的时候形参不能是普通类型,形参必须是复合类型,比如说数组就可以
 */
//1:插入排序
class InsertSort
{
//插入排序法
public void sort(int arr[])
{
for(int i=1; i<arr.length; i++)
{
int insertVal=arr[i];
//insertVal准备和前一个数比较
int index=i-1;
while(index>=0&&insertVal<arr[index])
{
//将把arr[index]向后移动
arr[index+1]=arr[index];
//让index 向前移动
index--;
}
//将insertVal 插入到适当的位置
arr[index+1]=insertVal;
}
}
}


//2:选择排序法
class Select
{
//选择快排序
int temp=0;
public void sort(int arr[])
{
//认为第一个数字是最小的
int temp=0;
for(int j=0; j<arr.length-1; j++)
{
int min=arr[j];
//记录最小数的下标
int minIndex=j;
for(int k=j+1; k<arr.length; k++)
if(min>arr[k])
{
min=arr[k];
minIndex=k;
}
temp=arr[j];
arr[j]=arr[minIndex];
arr[minIndex]=temp;
}
}
}



//3:冒泡排序法
class Bubble
{
public void test(int a)
{
a++;
}
public void sort(int arr[])
{
int temp=0;
//i是决定走几趟, 冒泡排序
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])
{
//换位
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
}


//4:快速排序
class QuickSort
{
public void sort(int [] a, int low, int high )
{

int pos;
if (low<high)
{
pos = FindPos(a, low, high);
sort(a, low, pos-1);
sort(a, pos+1, high);
}
}
public int FindPos(int [] a, int low, int high)
{
int val = a[low];
while (low<high)
{
while (low<high && a[high]>=val)
--high;
a[low] = a[high];
while (low<high && a[low]<=val)
++low;
a[high] = a[low];
}
a[low] = val;
return low;
}
}

0 0
原创粉丝点击