Chinaunix首页 | 论坛 | 博客
  • 博客访问: 164717
  • 博文数量: 60
  • 博客积分: 15
  • 博客等级: 民兵
  • 技术积分: 638
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-26 10:59
个人简介

喜欢coding,因为那是一件伟大的事情,是将无生命的IC赋予灵魂的过程,让我拥有了和上帝一样的成就感。(w1c2g3@163.com)

文章分类

全部博文(60)

文章存档

2017年(7)

2016年(41)

2015年(1)

2014年(4)

2013年(7)

我的朋友

分类: C/C++

2014-05-19 16:05:19


  1. #include <stdio.h>


  2. void print_array(int a[], int n)
  3. {
  4.     int i;
  5.     
  6.     for (i=0; i<n; i++)
  7.     {
  8.         printf("%d ", a[i]);
  9.     }
  10.     printf("\n");
  11. }

  12. void quick_sort(int a[], int l, int r)
  13. {
  14.     int i = l, j = r;
  15.     int k = a[l];
  16.     
  17.     if (l >= r)
  18.     {
  19.         return;
  20.     }
  21.     
  22.     while (i < j)
  23.     {
  24.         while (i < j && a[j] >= k)
  25.         {
  26.             j--;
  27.         }
  28.         if (a[j] < k)
  29.         {
  30.             a[i++] = a[j];
  31.         }
  32.         
  33.         while (i < j && a[i] <= k)
  34.         {
  35.             i++;
  36.         }
  37.         if (a[i] > k)
  38.         {
  39.             a[j--] = a[i];
  40.         }
  41.     }
  42.     a[i] = k; // critical
  43.     
  44.     quick_sort(a, l, i-1);
  45.     quick_sort(a, i+1, r);
  46. }

  47. void bubble_sort(int a[], int n)
  48. {
  49.     int i, j;
  50.     int tmp;
  51.     
  52.     for (i=0; i<n; i++)
  53.     {
  54.         for (j=0; j<n-i-1; j++)
  55.         {
  56.             if (a[j] > a[j+1])
  57.             {
  58.                 tmp = a[j];
  59.                 a[j] = a[j+1];
  60.                 a[j+1] = tmp;
  61.             }
  62.         }
  63.     }
  64. }

  65. void bubble_sort1(int a[], int n)
  66. {
  67.     int tmp;
  68.     int flag = 1;
  69.     int i;
  70.     
  71.     while (flag)
  72.     {
  73.         n--;
  74.         flag = 0;
  75.         for (i=0; i<n; i++)
  76.         {
  77.             if (a[i] > a[i+1])
  78.             {
  79.                 tmp = a[i];
  80.                 a[i] = a[i+1];
  81.                 a[i+1] = tmp;
  82.                 flag = 1;
  83.             }
  84.         }
  85.     }
  86. }

  87. void shell_sort(int a[], int n)
  88. {
  89.     int gap, i, j, tmp;
  90.     
  91.     for (gap=n/2; gap>0; gap/=2)
  92.     {
  93.         for (i=gap; i<n; i++)
  94.         {
  95.             tmp = a[i];
  96.             for (j=i-gap; j>0 && a[j]>tmp; j-=gap)
  97.             {
  98.                 a[j+gap] = a[j];
  99.             }
  100.             a[j+gap] = tmp;
  101.         }
  102.     }
  103. }

  104. void insert_sort(int a[], int n)
  105. {
  106.     int i, j, tmp;
  107.     
  108.     for (i=1; i<n; i++)
  109.     {
  110.         tmp = a[i];
  111.         for(j=i-1; j>=0 && a[j]>tmp; j--)
  112.         {
  113.             a[j+1] = a[j];
  114.         }
  115.         a[j+1] = tmp;
  116.     }
  117. }

  118. void merge_array(int a[], int mid, int n, int tmp[])
  119. {
  120.     int i = 0, imax = mid;
  121.     int j = mid, jmax = n;
  122.     int k = 0;
  123.     
  124.     while (i < imax && j < jmax)
  125.     {
  126.         tmp[k++] = (a[i]<a[j]) ? a[i++] : a[j++];
  127.     }
  128.     
  129.     while (i < imax)
  130.     {
  131.         tmp[k++] = a[i++];
  132.     }
  133.     
  134.     while (j < jmax)
  135.     {
  136.         tmp[k++] = a[j++];
  137.     }
  138.     
  139.     for (k=0; k<n; k++)
  140.     {
  141.         a[k] = tmp[k];
  142.     }
  143. }

  144. void merge_sort(int a[], int n, int tmp[])
  145. {
  146.     if (n <= 1)
  147.     {
  148.         return;
  149.     }
  150.     
  151.     merge_sort(a, n/2, tmp);
  152.     merge_sort(a+n/2, n-n/2, tmp);
  153.     merge_array(a, n/2, n, tmp);
  154. }


  155. #define N 10
  156. int a[] = {17, 23, 43, 12, 24, 46, 42, 32, 23, 13};

  157. main()
  158. {
  159.     int tmp[N];

  160.     
  161.     print_array(a, N);

  162.     //quick_sort(a, 0, N-1);
  163.     //bubble_sort(a, N);
  164.     //bubble_sort1(a, N);
  165.     //shell_sort(a, N);
  166.     //insert_sort(a, N);
  167.     merge_sort(a, N, tmp);

  168.     print_array(a, N);
  169. }


阅读(1573) | 评论(0) | 转发(0) |
0

上一篇:Linux spinlock

下一篇:mprotect

给主人留下些什么吧!~~