java学习之排序

排序

  • 概念:排序是将一群数据,依指定的顺序进行排列的过程。
  • 重要性:排序时数据处理中一种很重要的运算,也是很常用的运算,一般数据处理工作25%的时间都是在进行排序。

– 交换式排序法:属于内部排序法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的。主要有冒泡排序、快速排序。
– 选择式排序法:属于内部排序法,是从待排序的数据中,按指定的规则选出某一元素,经过和其他元素重整,再依原则交换位置后达到排序的目的。分为选择排序法、堆排序法。
– 插入式排序:属于内部排序法,是对于待排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。分为插入排序法、希尔排序法、二叉树排序法。

冒泡排序

    public class Sort 
{
    public static void main(String[] args) 
    {
        int arr[]={1,5,-1,8,4};

        for(int i=0;i<arr.length-1;i++)
        {
            //内层循环逐个比较,若前一个数比后一个数大,则交换
            for(int j=0;j<arr.length-i-1;j++)
            {
                if(arr[j]>arr[j+1])
                {
                    //交换
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+" ");
        }
    }
}   

快速排序法

public class Sort 
{
    public static void main(String[] args) 
    {
        int len=15;
        int[] arr=new int[len];
        for(int i=0;i<len;i++)
        {
            arr[i]=(int)(Math.random()*100);
        }
    //  quickSort1(arr, 0, arr.length-1);
        quickSort2(arr, 0, arr.length-1);
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+" ");
        }
    }

/*  public static void quickSort1(int a[],int left,int right)
    {
        int l=left;
        int r=right;
        int pivot=a[(l+r)/2];//找一个基准数,这里就取中间的
        while(l<r)
        {
            while(a[l]<pivot)l++;
            while(a[r]>pivot)r--;

            if(l>=r)break;

            int temp=a[l];
            a[l]=a[r];
            a[r]=temp;
        }
    //  System.out.println(pivot);
    //  System.out.println(l);
    //  System.out.println(r);
        if(left<r-1)quickSort1(a,left,r-1);
        if(right>l+1)quickSort1(a,l+1,right);
    }*/
    public static void quickSort2(int a[],int left,int right)
    {
        if(left<right)
        {
            int l=left,r=right,pivot=a[l];
            while(l<r)
            {
                while(l<r&&a[r]>pivot)r--;
                if(l<r)
                    a[l++]=a[r];
                while(l<r&&a[l]<pivot)l++;
                if(l<r)
                    a[r--]=a[l];
            }
            a[l]=pivot;
            quickSort2(a,left,l-1);
            quickSort2(a,l+1,right);
        }
    }
}

选择排序法

int arr[]={1,5,-1,8,4};
    for(int i=0;i<arr.length-1;i++)
        {
            int min=arr[i];
            int minIndex=i;
            for(int j=i+1;j<arr.length;j++)
            {
                if(arr[j]<min)
                {
                    min=arr[j];
                    minIndex=j;
                }
            }
            //找到最小值得位置,交换位置
            int temp=arr[i];
            arr[i]=arr[minIndex];
            arr[minIndex]=temp;
        }
        for(int i=0;i<arr.length;i++)
        {
            System.out.print(arr[i]+" ");
         }

插入排序法:

for(int i=1;i<arr.length;i++)
{
//要插入的数
int insertVal=arr[i];
//和前一个数比较
int index=i-1;
while(index>=0&&insertVal<arr[index])
{
//把arr[index]向后移
arr[index+1]=arr[index];
index--;
}
//把insertVal插入适当位置
arr[index+1]=insertVal;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值