zoukankan      html  css  js  c++  java
  • 快速排序

    成绩 10 开启时间 2015年12月9日 星期三 10:00
    折扣 0.8 折扣时间 2015年12月22日 星期二 23:55
    允许迟交 关闭时间 2015年12月31日 星期四 23:55

    要求根据给定输入,按照课堂给定的快速排序算法进行排序,输出排序结果和median3的返回值。

     注:1,cutoff值为5,不足cutoff使用插入排序。

            2,输入、输出格式参见测试用例0。

      1 #include"stdio.h"            
      2 #include"stdlib.h"
      3 #include"string.h"
      4 int num[10000];
      5 int median3[100], counter = 0;
      6 char N[100];
      7 
      8 int change();
      9 void Qsort(int left, int right);
     10 int partition(int left, int right);
     11 int find(int left, int right);
     12 void swap(int *a, int *b)
     13 {
     14     int temp;
     15     temp = *a;
     16     *a = *b;
     17     *b = temp;
     18 }
     19 void insertsort(int left, int right);
     20 
     21 int main()
     22 {
     23     int n, i = 0, j;
     24     while (1)
     25     {
     26         scanf("%s", &N);
     27         getchar();
     28         if (N[0] != '#')
     29         {
     30             n = change();
     31             num[i++] = n;
     32         }
     33         else
     34             break;
     35     }
     36     Qsort(0, i - 1);
     37     printf("After Sorting:
    ");
     38     for (j = 0; j<i; j++)
     39         printf("%d ", num[j]);
     40     printf("
    ");
     41     printf("Median3 Value:
    ");
     42     if (i>5)
     43     {
     44         for (j = 0; j<counter; j++)
     45             printf("%d ", median3[j]);
     46     }
     47     else
     48         printf("none");
     49     printf("
    ");
     50     system("pause");
     51     return 0;
     52 }
     53 
     54 int change()
     55 {
     56     int x = 0, L, i, flag = 0;
     57     L = strlen(N);
     58     if (N[0] == '-')
     59     {
     60         flag = 1;
     61     }
     62     for (i = flag; i<L; i++)
     63     {
     64         x *= 10;
     65         x += N[i] - 48;
     66     }
     67     if (flag)
     68         return -x;
     69     else
     70         return x;
     71 }
     72 
     73 void Qsort(int left, int right)
     74 {
     75     int middle;
     76     if (left<right)
     77     {
     78         middle = partition(left, right);
     79         if (middle != -1)
     80         {
     81             Qsort(left, middle - 1);
     82             Qsort(middle + 1, right);
     83         }
     84     }
     85 }
     86 
     87 int partition(int left, int right)
     88 {
     89     int key, temp;
     90     int i, j;
     91     if (right - left<5)
     92     {
     93         insertsort(left, right);
     94         return -1;
     95     }
     96     else
     97     {
     98         key = find(left, right);
     99         i = left;
    100         j = right - 1;
    101         while (i<j)
    102         {
    103             while (i<j&&num[++i]<key);
    104             while (i<j&&num[--j]>key);
    105             swap(&num[i], &num[j]);
    106         }
    107         swap(&num[i], &num[right - 1]);
    108         return i;
    109     }
    110 }
    111 
    112 int find(int left, int right)
    113 {
    114     int mid = (left + right) / 2;
    115     if (num[left]>num[mid])
    116         swap(&num[left], &num[mid]);
    117     if (num[left]>num[right])
    118         swap(&num[left], &num[right]);
    119     if (num[mid]>num[right])
    120         swap(&num[mid], &num[right]);
    121     swap(&num[mid], &num[right - 1]);
    122     median3[counter++] = num[right - 1];
    123     return num[right - 1];
    124 }
    125 
    126 void insertsort(int left, int right)
    127 {
    128     int i, j, k, temp;
    129     for (i = left + 1; i <= right; i++)
    130     {
    131         if (num[i] - num[i - 1]<0)
    132         {
    133             temp = num[i];
    134             for (j = left; num[j]<num[i]; j++);
    135             for (k = i; k >= j + 1; k--)
    136             {
    137                 num[k] = num[k - 1];
    138             }
    139             num[j] = temp;
    140         }
    141     }
    142 }
  • 相关阅读:
    PAT 甲级 1115 Counting Nodes in a BST (30 分)
    PAT 甲级 1114 Family Property (25 分)
    PAT 甲级 1114 Family Property (25 分)
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
    Python Ethical Hacking
  • 原文地址:https://www.cnblogs.com/yixianyong/p/5091787.html
Copyright © 2011-2022 走看看