zoukankan      html  css  js  c++  java
  • 排序算法

    参考白话经典算法 原文链接:http://blog.csdn.net/MoreWindows/article/category/859207

    1.冒泡排序

     1 void bubbleSort(int array[], int length){
     2     //外层控制循环次数 循环次数为=(排序总个数 - 1), 例:2个数只需要1次就可以比较出来
     3     //i 从1开始比较 只需要比较 (length-1)次即可
     4     for(int i=1; i<=length-1; i++){
     5         //j 负责具体的比较,j+1 是这一轮比较的最大下表值,与已循环的次数有关
     6         for(int j=0; j+1 <= length-1-(i-1); j++){
     7             if(array[j] > array[j+1]){    //j+1的下标
     8                 int temp = array[j];
     9                 array[j] = array[j+1];
    10                 array[j+1] = temp;
    11             }
    12         }
    13     }
    14 }
    
    

     2.插入排序

     1 void insertSort(int array[], int length){
     2     int i,j;
     3     //遍历所有的未排序数
     4     for(i=1; i<length; i++){
     5         //遍历所有从小到大的有序的数
     6         for(j=i-1; j>=0; j--){
     7             //从最大开始,遍历所有从小到大的有序数,并与要插入的数字比较
     8             if(array[i] > array[j])
     9                 //如果在有序数中找到了一个比要插入的数字小的
    10                 //则表明左边所有的数字都比这个数小,从有序最大开始
    11                 break;
    12         }
    13 
    14         //如果要插入的数比最大的数大,则不用插入;否则移动数据
    15         if(j != i-1){
    16             //下标[0,j]比要插入数小;
    17             //下标(j,i)/[j+1,i-1]比要插入数大;
    18             int tmp = array[i];
    19             int k;
    20             for(k=i-1;k+1>j;k--){
    21                 array[k+1] = array[k];
    22             }
    23             array[j+1] = tmp;
    24         }
    25     }
    26 }
    
    

      3.快速排序

     1 int adjustArray(int array[], int l, int r){
     2     int i = l,j = r;
     3 
     4     //先将最左边的数取出来,并作为比较对象
     5     int x = array[l];
     6 
     7     while(i < j){
     8         //从右到左比较 找一个比x小的数字
     9         while((i<j) && (array[j] > x))
    10             j--;
    11         if(i < j){
    12             //如果找到 就将这个数放到最左边的位置
    13             array[i] = array[j];
    14             i++;
    15         }
    16 
    17         //从左到右比较 找到一个比x大的数字
    18         while((i<j) && (array[i] < x))
    19             i++;
    20         if(i < j){
    21             //如果找到就将这个数放到刚才比x小的那个数的位置上面
    22             array[j] = array[i];
    23             j--;
    24         }
    25     }
    26 
    27     //将比较的对象放到中间的位置,这样,左边的所有的数就比这个
    28     //数小,右边所有的数字就比这个数大
    29     //最后返回这个数的位置
    30     array[i] = x;
    31     return i;
    32 }
    33 
    34 void quickSort(int array[], int l, int r){
    35     if(l < r){
    36         int i = adjustArray(array,l,r);
    37         //递归调用
    38         quickSort(array,l,i-1);
    39         quickSort(array,i+1,r);
    40     }
    41 }

    
    
  • 相关阅读:
    学习redis-安装和基本一些命令
    Eclipse启动报错Java was started but returned exit code=13
    踩过的坑系列之InputStream.read(byte[])方法
    <<深入Java虚拟机>>-虚拟机类加载机制-学习笔记
    <<深入Java虚拟机>>-第三章-垃圾收集器与内存分配策略-学习笔记
    <<深入Java虚拟机>>-第二章-Java内存区域-学习笔记
    创建线程的两种方式比较Thread VS Runnable
    Java设计模式之--代理模式学习
    shell脚本中$参数的介绍
    (转)使用DataTime这个类来获取当前的时间
  • 原文地址:https://www.cnblogs.com/alin-qu/p/5542664.html
Copyright © 2011-2022 走看看