public static void main(String[] args) {
int a[]=new int []{1,5,6,7,2,4,9,3,8};
maopaoSort(a);
quickSort2(a,0,a.length-1);
selectSort(a);
insertSort(a);
System.out.println(Arrays.toString(a));
}
//冒泡排序:两两之间进行比较,第一趟找出一个最大的放在后面
public static void maopaoSort(int []a)
{
int temp;
for(int i=0;i<a.length-1;i++)
{
for(int j=0;j<a.length-1-i;j++) //每次后面都有i了就省去i
{
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
//快速排序:选取一个中间值temp,然后把大的放在右边,小的放在左边,两边分别递归重复此过程
public static void quickSort2(int s[],int left,int right)
{
if(left>=right)
{
return ;
}
int i=left,j=right,temp=s[left];
while(i<j)
{
while(i<j&&s[j]>=temp)
{
j--;
}
s[i]=s[j];
while(i<j&&s[i]<=temp)
{
i++;
}
s[j]=s[i];
j--;
}
s[i]=temp; //一趟排序后比temp小的都在左边,比temp大的都在右边,中间位置的索引i=j
quickSort2(s,left,i-1);
quickSort2(s,i+1,right);
}
//选择排序:每次找出一个最大的放在前面,第二次再找一个放在第一次的末尾,和冒泡刚好相反
public static void selectSort(int []a)
{
for (int i = 0; i < a.length; i++) {
int index=i; //假设当前元素是最小的
for (int j = i+1; j <a.length ; j++) { //第二个数应该从1开始,但是每次选择好的数都放在前面,所以省去了i
if(a[index]>a[j])
{
index=j; //还有比当前更小的就记录更小的
}
}
int temp=a[index];
a[index]=a[i];
a[i]=temp;
}
}
//插入排序:假设前面 n-1个数已经是排好顺序的,现将第 n 个数插到前面已经排好的序列中,
public static void insertSort(int a [])
{
int temp;
for (int i = 0; i < a.length; i++) {
for (int j = i; j>0; j--) {
if(a[j]<a[j-1]) //比较当前的与之前的,哪个小,小的放前面
{
temp=a[j];
a[j]=a[j-1];
a[j-1]=temp; //一次一次往前移
}
}
}
}
冒泡/快排/选择排序/插入排序
最新推荐文章于 2024-09-14 18:46:05 发布