• 烙饼排序


     
     1 #include <stdio.h>
     2 // print the array
     3 int printArr(int* arr, int length)
     4 {
     5     int i = 0;
     6     for(i=0;i<length;i++)
     7         printf("%d	",arr[i]);
     8     printf("
    ");
     9 }
    10 // swap 2 value
    11 void swapValue(int *a, int * b)
    12 {
    13     int temp = 0;
    14     temp = *a;
    15     *a = *b;
    16     *b = temp;
    17 }
    18 // check whether the array is sorted
    19 int isDone(int * arr, int length)
    20 {
    21     while(--length>=1)
    22     {
    23         if(arr[length]>arr[length-1])
    24             return 0;
    25     }
    26     return 1;
    27 }
    28 // find the biggest value's index
    29 int findMaxIndex(int* arr, int length)
    30 {
    31     int i = 0;
    32     int standBy = arr[0];
    33     while(length--)
    34     {
    35         if(standBy < arr[length])
    36         {
    37             standBy = arr[length];
    38             i = length;
    39         }
    40     }
    41     return i;
    42 }
    43 // reverse the part of the array from the start position
    44 int reversePart(int* arr, int start, int length)
    45 {
    46     int end = length-1;
    47     while(start<=end)
    48     {
    49         swapValue(&arr[start],&arr[end]);
    50         start++;
    51         end--;
    52     }
    53 }
    54 // core algorithm
    55 // 1. find the biggest value's index
    56 // 2. check if the index is at the head of the array
    57 //    true : enter the next loop
    58 //    false : go to 3 step
    59 // 3. check if the index is at the end of the array
    60 //    true : go to 4 step
    61 //    false : reverse the part -- get the biggest value to the end of the array
    62 // 4. reverse the selected part of the array
    63 // 5. check whether the array is sorted
    64 //    true : break the loop
    65 //    false : enter the next loop
    66 void biscuitSort(int* arr, int length)
    67 {
    68     int start = 0;
    69     int maxIndex = 0;
    70     for(start = 0; start < length; start++)
    71     {
    72         maxIndex = findMaxIndex(arr+start,length-start);
    73         if(maxIndex != 0)
    74         {
    75             if(maxIndex != length-start-1)
    76             {
    77                 reversePart(arr+start,maxIndex,length-start);
    78                 printArr(arr,length);
    79             }
    80             reversePart(arr+start,0,length-start);
    81             printArr(arr,length);
    82             if(isDone(arr,length))
    83                 break;
    84         }
    85     }
    86 }
    87  
    88 int main()
    89 {
    90     int arr[]= {7,1,2,5,4};
    91     printArr(arr, sizeof(arr)/sizeof(int));
    92     biscuitSort(arr, sizeof(arr)/sizeof(int));
    93     return 0;
    94 }
  • 相关阅读:
    spring开发_Spring+Hibernate_HibernateDaoSupport
    java开发_STMP邮箱客户端_发送邮件
    struts2开发_userlogin_模拟用户登录
    spring开发_邮箱注册_激活_获取验证码
    MFC笔记(1)
    MFC笔记(2)菜单
    wpf控件开发基础(5) 依赖属性实践
    wpf控件开发基础(3) 属性系统(2)
    wpf控件开发基础(2) 属性系统(1)
    Caliburn笔记依赖注入容器(wpf框架)
  • 原文地址:https://www.cnblogs.com/warnet/p/3862532.html
Copyright © 2020-2023  润新知