排序算法

class DataPaiXu
{
    
    /*--------------------------------------------------
    功能:              冒泡排序
    参数说明
        第一个:     a[]要排序的数组
        第二个:     数组的长度
    返回值:         无
    特别说明:   
                            数组元素大小按升序排列
                            排序好之后的数组还是a[]
    ----------------------------------------------------*/
    static void bubble_sort(int a[],int iLength)
    {
        int i,j;
        for(j=0;j<iLength-1;j++)
        {
            for(i=0;i<iLength-1-j;i++)
            {
                if(a[i]>a[i+1])
                {
                    /*交换a[i] 与a[i+1] 的数据*/
                    a[i] = a[i]^a[i+1];
                    a[i+1] = a[i]^a[i+1];
                    a[i]= a[i]^a[i+1];
                }
            }
        }
    }
    

    /*--------------------------------------------------
    功能:              选择排序
    参数说明
        第一个:     a[]要排序的数组
        第二个:     数组的长度
    返回值:         无
    特别说明:   
                            数组元素大小按升序排列
                            排序好之后的数组还是a[]
    ----------------------------------------------------*/

    static void select_sort(int a[], int iLength)
    {
        int i, j, min; 
        for( i =0; i < iLength -1; i ++) 
        { 
            min = i;    /*首先假设第一个是最小值*/
            for( j = i +1; j < iLength; j ++)
            {
                if( a[min] > a[j]) 
                    min = j;
            }
            //交换
            if(min != i) 
            {
                a[min] = a[min]^a[i];
                a[i] = a[min]^a[i];
                a[min] = a[min]^a[i];
            } 
        } 
     }    
    /*
    函数功能:把数组中所有比a[low]小的数字放在左边,
                               把数组中所有比a[low]大的数字放在右边,
                               最后返回a[low]值在数组中的位置
    */
    static int partions(int a[],int low,int high)
    {
        int low_value=a[low];
        while (low<high)
        {
            /*先从高位置查找,直到找出一个比low_value小的数字才退出while循环*/
             while (low<high&&a[high]>=low_value)
             --high;

             /*找到之后,放在此时low的位置上,大家注意这个时候high位置上的数据
             是没有意义的,因为它已经放在low位置上去了,
             下面的代码会把high位置上数据退换为一个有意义的数字的*/
             a[low]=a[high];

              /*再从低位置查找,直到找出一个比low_value大的数字才退出while循环*/
             while (low<high&&a[low]<=low_value) 
             ++low;

            /*把找到的数字放到数组high的位置上,
            这个时候high位置上的数字是有意义的,
            那么这个时候low位置上的数据是没有意义的,因为它的值放在了high上了*/
             a[high]=a[low];
        }
        /*把值放在low位置上,使得low位置上的数据有意义,
        从而整个数组上的每个数字都是有意义的*/
        a[low]=low_value;
        return low;
    }
    
    
    static void qsort(int a[],int low,int high)
    {
        int prvotloc;
        if(low<high)
        {
             prvotloc=partions(a,low,high); 
             qsort(a,low,prvotloc-1); //递归调用排序 由low 到prvotloc-1
             qsort(a,prvotloc+1,high); //递归调用排序 由 prvotloc+1到 high

        }
    }
    
    /*--------------------------------------------------
    功能:              快速排序
    参数说明
        第一个:     a[]要排序的数组
        第二个:     数组的长度
    返回值:         无
    特别说明:   
                            数组元素大小按升序排列
                            排序好之后的数组还是a[]
    ----------------------------------------------------*/
    static void quicksort(int a[],int n)
    {
        qsort(a,0,n-1);
    }
    
}

public class Test001 {
    public static void main(String[] args)
    {
        int number[]={50,45,15,78,84,51,24,12,9};
        int i;
        DataPaiXu  paixu = new DataPaiXu();
        //执行冒泡排序
        paixu.bubble_sort(number,number.length);
    
        //执行选择排序
        //paixu.select_sort(number,number.length);
        
        //执行快速排序
        //paixu.quicksort(number,number.length);
    
        for(i=0;i<number.length;i++)
        {
            System.out.printf("%d ",number[i]);
        }
        System.out.printf("\n");
    }
}
 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

书耳朵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值