几个排序算法(java版)


//改进的冒泡算法
public class 改进的冒泡算法 {
public static void main(String args[]){
int a[]={2,6,4,3,28,9,43,21,89,23};
bubblesort(a);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
public static void bubblesort(int arr[]){
boolean b =false;
int temp;
for(int i = 1;i<arr.length;i++){ //下标从第二个数开始,所以是1
b=false;
for(int j=arr.length-1;j>=i;j--){
if(arr[j]<arr[j-1]){ //满足条件时,交换
temp = arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
b = true;
}
}
if(!b){
break;
}
}

}
}

//快速排序算法1
public class 快速排序算法 {
public static void main(String args[]){
int a[]={23,6,7,88,76,65,44,338,59};
quicksort(a,0,a.length-1);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}

public static void quicksort(int arr[],int low,int high){
int i,j,k; //三剑客的约定
if(low<high){ //先决条件
i = low;
j = high;
k= arr[i]; //找到适合位置
while(i<j){
while(i<j&&arr[j]>k){
j--;
}
if(i<j){
arr[i]=arr[j];
i++;
}
while(i<j&&arr[i]<k){
i++;
}
if(i<j){
arr[j]=arr[i];
j--;
}
}
arr[i]=k; //装到适合的位置
quicksort(arr,low,i-1); //递归
quicksort(arr,i+1,high); //递归
}
}
}

//快速排序算法2
public class 快速排序2 {
public static void main(String ag[]){
int a[]={23,6,7,88,76,65,44,338,59};
quicksort2(a,0,a.length-1);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}


public static void quicksort2(int arr[],int low,int high){
if(low<high){ //条件
int i=partion(arr,low,high); //合适位置的获得
quicksort2(arr,low,i-1);
quicksort2(arr,i+1,high);
}
}
public static int partion(int arr[],int low,int high){ //目的是找到一个合适的位置和置一个数!
int temp = arr[low]; //得到要置的数
if(low<high){
int k=arr[low];
int mid=(low+high)/2;

while(low<high&&k<arr[high]){
high--;
}
if(low<high){
arr[low]=arr[high];
low++;
}
while(low<high&&k>arr[low]){
low++;
}
if(low<high){
arr[high]=arr[low];
high--;
}
}
arr[low]=temp; //置数
return low;
}
}

//归并排序
public class 归并排序算法 {

public static void main(String[] args) {
int a[]={23,6,7,88,76,65,44,338,59};
mergesort(a,0,a.length-1);
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}

public static void mergesort(int arr[],int start,int end){ //主函数
if(start<end){
int mid = (start+end)/2; //关键一步
mergesort(arr,start,mid); //递归
mergesort(arr,mid+1,end); //递归
merge(arr,start,mid,mid+1,end); //调用下面的函数
}
}
public static void merge(int arr[],int start1,int end1,int start2,int end2){ //被调用的函数
int i , j, k=0; //临时变量的使用
i = start1;
j=start2;
int temp[] = new int[end2-start1+1]; //临时数组的大小规格
while(i<=end1&&j<=end2){
if(arr[i]>arr[j]){
temp[k++]=arr[j++];
}else {
temp[k++]=arr[i++];
}
}
//把剩下的元素依次放入临时数组中
while(i<=end1){
temp[k++]=arr[i++];
}
while(j<=end2){
temp [k++]=arr[j++];
}
//归还到原来的数组中去
k = start1;
for(int element :temp){
arr[k++]=element;
}
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值