zoukankan      html  css  js  c++  java
  • 一些常用的排序算法(C版)

    1. 直接插入排序(稳定排序)

    简单的说就是将序列分为有序序列和无序序列。每一趟排序都是将无序序列的第一个元素插入有序序列中。R[1… i-1] <- R[i…n] , 每次取R[i]插入到R[1… i-1]中。

    步骤如下:

    1> 在R[1 … i-1]中找到R[i]的插入位置k (0<k<i)

    2> 将R[k … i-1]均后移一位,K位置上插入R[i]

    改进版:

    1> 在R[1 … i-1]中将R[i]从右向左一一比较,R[j] >R[i],则R[j]后移一位(j = i-1开始)

    2> 如果R[j] <=R[i],则j+1 为R[i]的插入位置

     1 #include<stdio.h>
     2 void insert_sort(int a[],int len)
     3 {
     4     int i=0,j=0,temp=0;
     5     for(i=1;i<len;i++)
     6     {
     7         temp =a[i];
     8         for(j=i-1;j>=0&&temp<a[j];j--)
     9         {
    10             a[j+1]=a[j];
    11         }
    12         a[j+1]=temp;
    13     }
    14 }
    15 
    16 void print_array(int a[],int len)
    17 {
    18     for(int i=0;i<len;i++)
    19     {
    20         printf("a[%d] = %d
    ",i ,a[i]);
    21     }
    22     printf("
    ");
    23 }
    24 
    25 
    26 int main()
    27 {
    28  int a[]={1,2,7,8,10,4,54,82,23} ;
    29  printf("before sort
    ");
    30  print_array(a,sizeof(a)/sizeof(a[0]));
    31  insert_sort(a,sizeof(a)/sizeof(a[0]));
    32  printf("after sort
    ");
    33  print_array(a,sizeof(a)/sizeof(a[0]));
    34  return 0;
    35 }

    2. 冒泡排序(稳定排序)

    冒泡排序也叫起泡排序,顾名思义,就是每一趟,从左到右,两两比较,大的(小的)后移,最后最轻的气泡到最后的位置R[i],为最大或最小值,然后下一趟,选出次大的到R[i-1],以此,到最后R[1],至此全部有序。(按照递增递减都可以)

     1 #include<stdio.h>
     2 
     3 /* ...a[n] ,从a[0]最小开始,*/
     4 void bubble_sort_S2B(int a[],int len)
     5 {
     6     int i,j,temp;
     7     for(i=0;i<len-1;i++)
     8     {
     9         for(j=0;j<len-i-1;j++)
    10         {
    11             if(a[j+1]<a[j])
    12             {
    13                 temp=a[j];
    14                 a[j]=a[j+1];
    15                 a[j+1]=temp;
    16             }
    17         }
    18     }
    19 }
    20 void bubble_sort_B2S(int a[],int len)
    21 {
    22     int i,j,temp;
    23     for(i=0;i<len-1;i++)
    24     {
    25         for(j=0;j<len-i-1;j++)
    26         {
    27             if(a[j+1]>a[j])
    28             {
    29                 temp=a[j];
    30                 a[j]=a[j+1];
    31                 a[j+1]=temp;
    32             }
    33         }
    34     }
    35 }
    36 
    37 
    38 void print_array(int a[],int len)
    39 {
    40     for(int i=0;i<len;i++)
    41     {
    42         printf("a[%d] = %d
    ",i ,a[i]);
    43     }
    44     printf("
    ");
    45 }
    46 
    47 
    48 int main()
    49 {
    50  int a[]={1,2,7,8,10,4,54,82,23} ;
    51  printf("before sort
    ");
    52  print_array(a,sizeof(a)/sizeof(a[0]));
    53  bubble_sort_B2S(a,sizeof(a)/sizeof(a[0]));
    54  printf("after sort
    ");
    55  print_array(a,sizeof(a)/sizeof(a[0]));
    56  return 0;
    57 }

  • 相关阅读:
    电商第一季函数笔记(1)
    沈逸老师PHP魔鬼特训笔记(2)
    PHP读书笔记(3)-常量
    2015/8/9 到家了,学完了CodeCademy的Python
    2015/8/4 告别飞思卡尔,抛下包袱上路
    2015/6/23 浪潮过去,我才来
    方维团购系统二次开发,项目经验
    方维团购系统整合云短信网短信平台,方维系统整合短信平台
    方维团购系统,下订单保存多个收货地址
    PHP木马查杀文件,木马查杀插件
  • 原文地址:https://www.cnblogs.com/hwli/p/8848328.html
Copyright © 2011-2022 走看看