赣州瑞金网站建设个人网站做贷款广告

1 煎饼排序问题
给定一个未排序的数组,任务是对给定数组进行排序。您只能在阵列上执行以下操作。
 翻转(arr,i):将数组从0反转为i
 示例:
 输入:arr[]={23、10、20、11、12、6、7}
 输出:{6、7、10、11、12、20、23}
 输入:arr[]={0,1,1,0,0}
 输出:{0,0,0,1,1}
 方法:与传统排序算法不同,传统排序算法试图以尽可能少的比较进行排序,其目标是以尽可能少的反转对序列进行排序。
 这个想法是做一些类似于选择排序的事情。我们一个接一个地将最大元素放在末尾,并将当前数组的大小减少一个。
 以下是详细步骤。设给定数组为arr[],数组大小为n。
 对每个curr_size执行以下操作:
 (1)查找arr[0到curr_szie-1]中最大元素的索引。让索引为“mi”;
 (2)翻转(arr,mi);
 (3)翻转(arr,curr_size–1);
2 源代码
using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public static partial class Algorithm_Gallery{private static int PSP_Ceil_Search(int[] arr, int low, int high, int x){if (x <= arr[low]){return low;}if (x > arr[high]){return -1;}int mid = (low + high) / 2;if (arr[mid] == x){return mid;}if (arr[mid] < x){if (mid + 1 <= high && x <= arr[mid + 1]){return mid + 1;}else{return PSP_Ceil_Search(arr, mid + 1, high, x);}}if (mid - 1 >= low && x > arr[mid - 1]){return mid;}else{return PSP_Ceil_Search(arr, low, mid - 1, x);}}private static void PSP_Flip(ref int[] arr, int i){int temp, start = 0;while (start < i){temp = arr[start];arr[start] = arr[i];arr[i] = temp;start++;i--;}}private static void PSP_Insertion_Sort(ref int[] arr, int size){for (int i = 1; i < size; i++){int j = PSP_Ceil_Search(arr, 0, i - 1, arr[i]);if (j != -1){PSP_Flip(ref arr, j - 1);PSP_Flip(ref arr, i - 1);PSP_Flip(ref arr, i);PSP_Flip(ref arr, j);}}}}
}
 
第二部分:
using System;
using System.Collections;
using System.Collections.Generic;namespace Legalsoft.Truffer.Algorithm
{public static partial class Algorithm_Gallery{private static int PSP_Find_Maxium(int[] arr, int n){int mi=0;for (int i = 0; i < n; i++){if (arr[i] > arr[mi]){mi = i;}}return mi;}public static void Pancake_Sort(ref int[] arr, int n){for (int curr_size = n; curr_size > 1; curr_size--){int mi = PSP_Find_Maxium(arr, curr_size);if (mi != curr_size - 1){PSP_Flip(ref arr, mi);PSP_Flip(ref arr, curr_size - 1);}}}}
}
 

3 源程序
using System;
 using System.Collections;
 using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
 {
     public static partial class Algorithm_Gallery
     {
         private static int PSP_Ceil_Search(int[] arr, int low, int high, int x)
         {
             if (x <= arr[low])
             {
                 return low;
             }
             if (x > arr[high])
             {
                 return -1;
             }
             int mid = (low + high) / 2;
            if (arr[mid] == x)
             {
                 return mid;
             }
             if (arr[mid] < x)
             {
                 if (mid + 1 <= high && x <= arr[mid + 1])
                 {
                     return mid + 1;
                 }
                 else
                 {
                     return PSP_Ceil_Search(arr, mid + 1, high, x);
                 }
             }
             if (mid - 1 >= low && x > arr[mid - 1])
             {
                 return mid;
             }
             else
             {
                 return PSP_Ceil_Search(arr, low, mid - 1, x);
             }
         }
        private static void PSP_Flip(ref int[] arr, int i)
         {
             int temp, start = 0;
             while (start < i)
             {
                 temp = arr[start];
                 arr[start] = arr[i];
                 arr[i] = temp;
                 start++;
                 i--;
             }
         }
        private static void PSP_Insertion_Sort(ref int[] arr, int size)
         {
             for (int i = 1; i < size; i++)
             {
                 int j = PSP_Ceil_Search(arr, 0, i - 1, arr[i]);
                if (j != -1)
                 {
                     PSP_Flip(ref arr, j - 1);
                     PSP_Flip(ref arr, i - 1);
                     PSP_Flip(ref arr, i);
                     PSP_Flip(ref arr, j);
                 }
             }
         }
     }
 }
  
using System;
 using System.Collections;
 using System.Collections.Generic;
namespace Legalsoft.Truffer.Algorithm
 {
     public static partial class Algorithm_Gallery
     {
         private static int PSP_Find_Maxium(int[] arr, int n)
         {
             int mi=0;
             for (int i = 0; i < n; i++)
             {
                 if (arr[i] > arr[mi])
                 {
                     mi = i;
                 }
             }
             return mi;
         }
        public static void Pancake_Sort(ref int[] arr, int n)
         {
             for (int curr_size = n; curr_size > 1; curr_size--)
             {
                 int mi = PSP_Find_Maxium(arr, curr_size);
                 if (mi != curr_size - 1)
                 {
                     PSP_Flip(ref arr, mi);
                     PSP_Flip(ref arr, curr_size - 1);
                 }
             }
         }
     }
 }
  
