Chinaunix首页 | 论坛 | 博客
  • 博客访问: 236516
  • 博文数量: 65
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 417
  • 用 户 组: 普通用户
  • 注册时间: 2012-08-05 15:12
个人简介

路漫漫其修远兮,吾将上下而求索

文章分类

全部博文(65)

文章存档

2016年(1)

2015年(12)

2014年(34)

2013年(16)

2012年(2)

我的朋友

分类: LINUX

2015-02-28 19:54:26


点击(此处)折叠或打开

  1. #include <stdio.h>

  2. #define SWAP(x, y, type) {type temp = x; x = y; y = temp;}
  3. //#define SWAP(x, y) {x = x+y; y = x - y; x = x - y;}

  4. void outprint(int arr[], int n)
  5. {
  6.     int i = 0;
  7.     for (; i < n; i++)
  8.     {
  9.         printf("arr[%d] = %d\t", i, arr[i]);
  10.     }
  11.     printf("\n");
  12. }
  13. //冒泡排序(沉底排序)
  14. void bubble_sort(int arr[], int n)
  15. {
  16.     int i, j, flag;

  17.     for (i=0; i < n-1; i++)    //最外层n-1次
  18.     {
  19.         flag = 1;
  20.         for (j = 0; j < n-1-i; j++)    //每次都少一次比较(-i)
  21.         {
  22.             if (arr[j] > arr[j+1])
  23.             {
  24.                 SWAP(arr[j], arr[j+1], int)
  25.                 flag = 0;
  26.             }
  27.         }

  28.         if (flag == 1)
  29.         {
  30.             break;
  31.         }
  32.     }
  33. }
  34. //插入排序
  35. void insert_sort(int arr[], int n)
  36. {
  37.     int i, j, k;
  38.     int temp;
  39.     for (i=0; i < n - 1; i++)
  40.     {    
  41.         j = i+1;
  42.         temp = arr[j];

  43.         for (;j>0 && temp < arr[j-1]; j--)
  44.         {
  45.             arr[j] = arr[j-1];
  46.         }
  47.         arr[j] = temp;
  48.     }
  49. }
  50. //选择排序
  51. void select_sort(int arr[], int n)
  52. {
  53.     int i, j, min;

  54.     for (i = 0; i < n - 1; i++)
  55.     {
  56.         min = i;

  57.         for (j = i+1; j < n ; j++)
  58.         {
  59.             if (arr[j] < arr[min])
  60.             {
  61.                 min = j;
  62.             }
  63.         }

  64.         if (min != i)
  65.         {
  66.             SWAP(arr[i], arr[min], int)
  67.         }
  68.     }
  69. }
  70. //选择排序改进版
  71. void select_sort_improve(int arr[], int n)    //选择排序改进
  72. {
  73.     int i, j, min, max;

  74.     for (i = 0; i < (n/2) ; i++)
  75.     {
  76.         min = max = i;

  77.         for (j = i+1; j < n - i ; j++)
  78.         {
  79.             if (arr[j] < arr[min])
  80.             {
  81.                 min = j;
  82.                 continue;
  83.             }
  84.             if (arr[j] > arr[max])
  85.             {
  86.                 max = j;
  87.             }
  88.         }

  89.         if (min != i)
  90.         {
  91.             SWAP(arr[min], arr[i], int)
  92.         }
  93.         
  94.         if (max != i)
  95.         {
  96.             SWAP(arr[max], arr[n-1-i], int)
  97.         }
  98.     }
  99. }
  100. //快速排序

    点击(此处)折叠或打开

    1. int partition(int arr[], int first, int last)
    2. {
    3.     int temp = arr[first];

    4.     while(first < last)
    5.     {
    6.         while (first < last && temp < arr[last])
    7.         {
    8.             last--;
    9.         }
    10.         if (first < last)
    11.         {
    12.             arr[first++] = arr[last];
    13.         }

    14.         while (first < last && temp > arr[first])
    15.         {
    16.             first++;
    17.         }
    18.         if (first < last)
    19.         {
    20.             arr[last--] = arr[first];
    21.         }
    22.     }
    23.     arr[first] = temp;
    24.     return first;
    25. }

    26. void quick_sort(int arr[], int first, int last)
    27. {
    28.     int k;
    29.     if (first < last)
    30.     {
    31.         k = partition(arr, first, last);
    32.         quick_sort(arr, first, k-1);
    33.         quick_sort(arr, k+1, last);
    34.     }
    35. }
  101. int main(int argc, char *argv[])
  102. {
  103.     int arr[] = {2,1,4,0,2,4,34,5,12,33};
  104.     //int arr[] = {1, 0};
  105.     int num = sizeof(arr)/sizeof(arr[0]);

  106.     printf("Before Sort:\n");
  107.     outprint(arr, num);
  108.     
  109. //    bubble_sort(arr, num);
  110. //    insert_sort(arr, num);
  111. //    select_sort(arr, num);
  112. //    select_sort_improve(arr, num);
  113.     quick_sort(arr, 0, num-1);    //传入的是元素下标 

  114.     printf("\nAfter Sort:\n");
  115.     outprint(arr, num);
  116. }

阅读(537) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~