复杂排序

#include <stdio.h>

 

//希尔排序:不稳定,是直接插入排序的改进

void ShellSort(int a[], int n)

{  

       int h,i,j,t;

      

       for(h = n/2; h > 0; h /= 2)//h为步长,下面算法由直接插入算法以h代替1得来

              for(i = h; i < n; i++)

              {

                     t=a[i];

                     j=i-h;

                     while(j>=0 && t<a[j])

                     {

                            a[j+h]=a[j];

                            j-=h;                           

                     }

                     a[j+h]=t;

              }

                    

}

 

//快速排序:不稳定,是冒泡排序的改进

void QuickSort(int a[],int low,int high)

{

       int i,j,t;

       if(low<high)

       {

              i=low;j=high;t=a[low];//lowhigha[low]为基准划分

              while(i<j)

              {

                     while(i<j && a[j]>t)

                            j--;

                     if(i<j)

                            a[i++]=a[j];

                    

                     while(i<j && a[i]<=t)

                            i++;

                     if(i<j)

                            a[j--]=a[i];

              }

             

              a[i]=t;

              QuickSort(a,low,i-1);

              QuickSort(a,i+1,high);

             

       }

}

 

//堆排序:不稳定,是直接选择排序的改进

void sift(int a[],int N,int s)

{

       int i,j,t;

       i=s;j=2*i+1;

       t=a[s];

 

       while(j<N)

       {

              if(j<N-1 && a[j]<a[j+1])

                     j++;

 

              if(t<a[j])

              {

                     a[i]=a[j];

                     i=j;

                     j=2*i+1;

              }

              else

                     break;

       }

       a[i]=t;

}

 

void HeapSort(int a[],int N)

{

       int i,j,t;

       //建初始堆

       for(i=N/2;i>=0;i--)

              sift(a,N,i);

 

       for(j=N-1;j>=1;j--)

       {

              t=a[0];

              a[0]=a[j];

              a[j]=t;

              sift(a,j,0);

       }

}

 

 

void main()

{

       int a[]={93,35,29,45,48,82,76,17};

       for(int i=0;i<8;i++)

              printf("%d  ",a[i]);

       printf("/n");

      

       ShellSort(a,8);

       for(i=0;i<8;i++)

              printf("%d  ",a[i]);

       printf("/n");

 

       QuickSort(a,0,7);

       for(i=0;i<8;i++)

              printf("%d  ",a[i]);

       printf("/n");

  

 

       HeapSort(a,8);

       for(i=0;i<8;i++)

              printf("%d  ",a[i]);

}

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JPA(Java Persistence API)是Java编程语言中用于与数据库进行交互的API规范。在JPA中,可以使用Sort对象来进行排序操作。Sort对象提供了一种灵活的方式来指定多个排序条件,以实现复杂排序。 使用Sort对象进行复杂排序的过程如下: 1. 创建Sort对象:可以使用Sort.by()方法来创建Sort对象。Sort.by()方法接受一个或多个Sort.Order参数,每个参数都表示一个排序条件。Sort.Order包含排序的字段名和排序方式(升序或降序)。 2. 设置排序条件:在创建Sort对象时,可以通过Sort.Order.asc()和Sort.Order.desc()来指定升序和降序排序。可以通过链式调用来添加多个排序条件。 3. 使用Sort对象进行排序:在查询数据时,可以将Sort对象作为参数传递给Repository的方法中。JPA会根据Sort对象中设定的排序条件来对查询结果进行排序,返回已排序的数据。 例如,假设有一个Student实体类,包含学生的姓名(name)和分数(score)属性。要按照分数降序排序,如果分数相同,则按照姓名升序排序,可以使用以下代码: ```java Sort sort = Sort.by(Sort.Order.desc("score"), Sort.Order.asc("name")); List<Student> students = studentRepository.findAll(sort); ``` 上述代码中,Sort对象通过Sort.by()方法创建,使用了两个Sort.Order参数。第一个参数表示按照分数降序排序,第二个参数表示在分数相同的情况下按照姓名升序排序。findAll方法接受Sort对象作为参数,返回已按照排序条件排序的学生列表。 通过使用Sort对象,可以轻松实现复杂排序操作,以满足不同的排序需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值