jquery 手机网站开发,微信营销系统平台,吴江住房和城乡建设部网站,wordpress小游戏主题1 煎饼排序问题
给定一个未排序的数组#xff0c;任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转#xff08;arr#xff0c;i#xff09;#xff1a;将数组从0反转为i 示例#xff1a; 输入#xff1a;arr[]{23、10、20、11、12、6、7} 输出#xff1a…
1 煎饼排序问题
给定一个未排序的数组任务是对给定数组进行排序。您只能在阵列上执行以下操作。 翻转arri将数组从0反转为i 示例 输入arr[]{23、10、20、11、12、6、7} 输出{6、7、10、11、12、20、23} 输入arr[]{01100} 输出{00011} 方法与传统排序算法不同传统排序算法试图以尽可能少的比较进行排序其目标是以尽可能少的反转对序列进行排序。 这个想法是做一些类似于选择排序的事情。我们一个接一个地将最大元素放在末尾并将当前数组的大小减少一个。 以下是详细步骤。设给定数组为arr[]数组大小为n。 对每个curr_size执行以下操作 1查找arr[0到curr_szie-1]中最大元素的索引。让索引为“mi” 2翻转arrmi 3翻转arrcurr_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 mi0;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 mi0; 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); } } } } }