您的位置:首页 > 其它

排序——快速排序

2017-02-14 23:48 134 查看
已知数列{49,38,65,97,76,13,27,49}

1>快速排序 --> http://blog.csdn.net/jianyuerensheng/article/details/51258374
  快速排序(是冒泡排序的一个升级)就是先找一个基准(一般是将数组第一个值作为基准元素),然后通过第一趟扫描 将数组分为两部分,一部分是小于基准元素的,另一部分是大于基准元素的,最后通过递归实现分而治之,用同样的方法对两部分都进行操作,直到不能再分

public class sortKuaiTest {
public static void main(String[] args) {
int[] arrNum = {49,38,65,97,76,13,27,49};
//排序方法
sort(arrNum,0,arrNum.length-1);
//打印输出结果
for(int i=0;i<arrNum.length;i++){
System.out.println(arrNum[i]);
}
}
//排序
public static void sort(int[] arrNum,int ss,int ee){
if(ss>=ee){
return;
}
     //找中间位置
int middle = getMiddleNum(arrNum,ss,ee);
//递归排序
sort(arrNum,ss,middle-1);
sort(arrNum,middle+1,ee);
}
  //找中间位置
public static int getMiddleNum(int[] arrNum,int ss,int ee){
int tempNum = arrNum[ss];  //基准(选取数组第一个为基准数)
while(ss<ee){
       //从后往前遍历
while(ss<ee && arrNum[ee]>=tempNum){
ee--;
}
arrNum[ss] = arrNum[ee];
       //从前往后遍历
while(ss<ee && arrNum[ss]<=tempNum){
ss++;
}
arrNum[ee] = arrNum[ss];
}
     //讲基准数赋值给结束位置
arrNum[ee] = tempNum;
return ee;
}
}


2>冒泡排序

public class sortKuaiTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arrNum = {49,38,65,97,76,13,27,49};
sortMP(arrNum);
for(int i=0;i<arrNum.length;i++){
System.out.println(arrNum[i]);
}
}
public static void sortMP(int[] arrNum){
     //双层for循环遍历数组,逐个对比,如果后者小于前者则交换位置,实现了冒泡
     for(int i=0;i<arrNum.length;i++){
for(int j=i+1;j<arrNum.length;j++){
if(arrNum[i]>arrNum[j]){
int tempNum = arrNum[i];
arrNum[i] = arrNum[j];
arrNum[j] = tempNum;
}
}
}
}
}


3>插入排序

  插入排序,就是从第二个值开始,与前面的值进行比较然后进行移位和插入

public class sortKuaiTest {
public static void main(String[] args) {
int[] arrNum = {49,38,65,97,76,13,27,49};
sortCR(arrNum);
for(int i=0;i<arrNum.length;i++){
System.out.println(arrNum[i]);
}
}
//----------------------------插入排序-------------------------------
public static void sortCR(int[] arrNum){
int i,j,tempNum;
for(i=1;i< arrNum.length;i++){ //从数组第二个值开始进行
tempNum = arrNum[i];       //暂时保存当前循环的值(即:要插入的值)
j=i-1;
while(j>=0 && tempNum<arrNum[j]){ //如果有插入的值比较小的,循环后移
arrNum[j+1] = arrNum[j];
j--;
}
arrNum[j+1] = tempNum;
}
}
}


4>希尔排序

  希尔排序是插入排序的升级,是先设置增量(初始将增量设置为数组的一半,逐渐递减为增量的一半,直到增量为1),然后判断两个值的大小进行交换位置

public class sortKuaiTest {
public static void main(String[] args) {
int[] arrNum = {49,38,65,97,76,13,27,49};
sortXE(arrNum);
for(int i=0;i<arrNum.length;i++){
System.out.println(arrNum[i]);
}
}
//----------------------------希尔排序-------------------------------
public static void sortXE(int[] arrNum){
int i,j,tempNum; //i为每次排序的增量
for(i=arrNum.length/2;i>0;i /= 2){  //增量为上一次的一半(i/2)
for(j=0;j<arrNum.length-i; j++){
if(arrNum[j]>arrNum[j+i]){  //升序或降序在这里可以设置
tempNum = arrNum[j];
arrNum[j] = arrNum[j+i];
arrNum[j+i] = tempNum;
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: