小白学到的几种排序算法,记录一下方便复习
1.选择排序
public static void XuanZhe() {
int min,i;
for(i=0;i<a.length-1;i++)
{
min=i; //把选择的每一个都看作最小,然后跟后面的每一个比较,
for(int j=i+1;j<a.length;j++)
if(a[min]>a[j])
min=j; //小的就倒换一下下标,最后的下标就是最小的
int temp = a[i]; //把找到的最小的数与第i个互换
a[i] = a[min];
a[min] =temp;
}
}
2.冒泡排序
public static void MaoPao() {
for(int i=0;i<a.length-1;i++) //总共比较n-1次
for(int j=0;j<a.length-i-1;j++) //每一次都从0开始向右找到倒数第i个数
if(a[j]<a[j+1])
{
int temp = a[j];
a[j] = a[j+1];
a[j+1] =temp;
}
}
3.快速排序
public static void qsort(int l,int r) {
if(l>r)return; //退出递归的出口
int i = l;
int j = r;
int mid=(l+r)/2;
int tmp = a[mid]; //把中间的数拿掉
a[mid]=a[i]; //把第一个数放在中间
while(i<j) {
while(i<j && a[j]>=tmp)j--; //从右边开始循环到一个比中间值小的数
a[i]=a[j]; //从右边拿数放到左边
while(i<j && a[i]<=tmp)i++; //从左边开始循环到一个比中间值大的数
a[j]=a[i]; //从左边拿数放到右边
}
a[i]=tmp; //i现在处于中间位置,把tmp放到中间
qsort(l,i-1); //分成两部分分别递归
qsort(i+1,r);
}