排序算法(冒泡,选择,快速)Java 实现

时间:2022-04-15 09:06:32

冒泡 排序:

public static void Bubblesort(int [] a)

{
for(int x=0;x<=a.length-1;x++)
{
for(int y=0;y<a.length-1-x;y++)
{
swapArrayAsc(a,y,y+1);
}
}

}

选择排序:

public static void SelectorSort(int [] a)
{
for(int x=0;x<=a.length-1;x++)
{
for(int y=x+1;y<=a.length-1;y++)
{
swapArrayAsc(a,x,y);
}
}

}

快速排序(While):

public static void quickSort(int[] a, int l, int r) {
int i = l, j = r, x = a[l];
if (l < r) {
while (i < j) {
while (i < j && a[j] >= x)//前面虽然while里判断过,但while最后还有个j--,j--之后可能会出现i=j的情况,所以if不能去掉。
j--;
if (i < j) {
a[i] = a[j];
//i++;
}
while (i < j && a[i] < x)
i++;
if (i < j) {
a[j] = a[i];
//j--;
}
}
a[i] = x;
if( i-l >1 )
quickSort(a, l, i - 1);
if( r-i >1 )
quickSort(a, i + 1, r);

}
}

快速排序(for)

private static void QuickSort(int[] array,int start,int end) 
  { 
      if(start<end) 
      { 
          int key=array[start];//初始化保存基元  
          int i=start,j;//初始化i,j  
          for(j=start+1;j<=end;j++) 
          { 
              if(array[j]<key)//如果此处元素小于基元,则把此元素和i+1处元素交换,并将i加1,如大于或等于基元则继续循环  
              { 
                  int temp=array[j]; 
                  array[j]=array[i+1]; 
                  array[i+1]=temp; 
                  i++; 
              } 
                
          } 
          array[start]=array[i];//交换i处元素和基元  
          array[i]=key; 
          QuickSort(array, start, i-1);//递归调用  
          QuickSort(array, i+1, end); 
            
      } 
        
  }

打印以及交换:

public static void printArray(int [] a)
{
System.out.print("[");
for(int i=0;i<=a.length-1;i++)
{
if(i!=a.length-1)
System.out.print(a[i]+",");
else System.out.print(a[i]+"]");
}
}
public static void swapArrayAsc(int [] a, int x,int y)//,boolean sortFlag)
{
if(a[x]>a[y])
{
int temp=a[x];
a[x]=a[y];
a[y]=temp;
}
}

-----------------------------------------------======================================---------------------------------------------------------------------

取最值

public static int getMaxArray(int [] a)
{
int max=0;
for(int x=0;x<=a.length-1;x++)
{
if (a[x]>a[max])
{
max=x;
}
}
return a[max];
}
public static int getMaxArray2(int [] a)
{
int max=a[0];
for(int x=0;x<=a.length-1;x++)
{
if (a[x]>max)
{
max=a[x];
}
}
return max;
}

二分查找法:

public static int halfSearchGetIndex(int [] a,int key)
{
int  min=0,max=a.length-1,mid=(min+max)/2;
while(a[mid]!=key)
{

if(a[mid]<key)
{
max=mid-1;
}
else if(a[mid]>key)
{
min=mid+1;
}
if(max<min)
return -1;
mid=(min+max)/2;
}
return mid;

}
public static int halfSearchGetIndex2(int [] a,int key)
{
int min=0,max=a.length-1,mid=(min+max)/2;
while(min<=max)
{
mid=(min+max)/2;
if(a[mid]<key)
{
max=mid-1;
}
else if(a[mid]>key)
{
min=mid+1;
}
else return mid;
}
return -1;
}