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 }

    
    
  • 相关阅读:
    HDU4685 Prince and Princess 完美搭配+良好的沟通
    坚持 本身是一种策略
    PowerDesigner中SQL文件、数据库表反向生成PDM
    Filter技术+职责链模式
    [ACM] poj 1258 Agri-Net (最小生成树)
    android 屏幕适配 课程笔记
    HDU 5071 Chat
    【玩转微信公众平台之中的一个】序章(纯粹扯淡)
    HTML表格标签的使用-&lt;table&gt;
    hdu 1251 统计难题 (map水过)
  • 原文地址:https://www.cnblogs.com/alin-qu/p/5542664.html
Copyright © 2011-2022 走看看