自己写的手撕算法练习
1.归并排序:
public static void merge(int []a,int l,int r,int mid)
{
int []temp=new int[r-l+1];
int i=l;
int j=mid+1;
int k=0;
while(i<=mid&&j<=r)
{
if(a[i]<=a[j])
{
temp[k]=a[i];
i++;
}
else
{
temp[k]=a[j];
j++;
}
k++;
}
while(i<=mid)
{
temp[k]=a[i];
i++;
k++;
}
while(j<=r)
{
temp[k]=a[j];
j++;
k++;
}
for(i=0,j=l;j<=r;j++,i++)
{
a[j]=temp[i];
}
}
public static void ksort(int []a,int l,int r)
{
if(r-l>=1)
{
int mid=(l+r)/2;
ksort(a,l,mid);
ksort(a,mid+1,r);
merge(a,l,r,mid);
}
}
public static void main(String []args)
{
int []a={5,6,2,3,4,8,9};
ksort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+",");
}
2.快速排序
public static void qsort(int []a,int l,int r)
{
if(l>=r)
return;
int i=l,j=r;
int t,temp=a[l];
while(i<j)
{
while(i<j&&a[j]>=temp)//先从右往左找
{
j--;
}
while(i<j&&a[i]<=temp)
{
i++;
}
if(i<j)
{
t=a[i];
a[i]=a[j];
a[j]=t;
}
}
a[l]=a[i];
a[i]=temp;
qsort(a,l,i-1);
qsort(a,i+1,r);
}
public static void main(String []args)
{
int []a={5,6,2,3,4,8,9};
qsort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.print(a[i]+",");
}
3.双端链表
public class DeList {
priv