网站建设上线问题,鹤壁网站seo,网站的规划和建设方案,高端网站定制策划C#冒泡排序算法
简介
冒泡排序算法是一种基础的排序算法#xff0c;它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大#xff08;或最小#xff09;的元素逐步冒泡到数列的末尾。
详细文章描述
https://mp.weixin.qq.com/s/z_LPZ6QUFNJcw…C#冒泡排序算法
简介
冒泡排序算法是一种基础的排序算法它的实现原理比较简单。核心思想是通过相邻元素的比较和交换来将最大或最小的元素逐步冒泡到数列的末尾。
详细文章描述
https://mp.weixin.qq.com/s/z_LPZ6QUFNJcwaEw_H5qbQ
代码实现 /// summary/// 递归方式实现冒泡排序/// /summary/// param namearrarr/param/// param namearrLengtharrLength/parampublic static void RecursiveBubbleSort(int[] arr, int arrLength){if (arrLength 1)return;for (int i 0; i arrLength - 1; i){if (arr[i] arr[i 1]){//交换arr[i]和arr[i1]的值int temp arr[i];arr[i] arr[i 1];arr[i 1] temp;}}RecursiveBubbleSort(arr, arrLength - 1);}public static void RecursiveBubbleSortRun(){int[] arr { 1, 8, 9, 5, 6, 2, 3, 4, 7 };int arrLength arr.Length;RecursiveBubbleSort(arr, arrLength);Console.WriteLine(排序后结果 string.Join(, , arr));}C#选择排序算法
简介
选择排序算法的基本思想是每一次从待排序的数据元素中选出最小或最大的一个元素存放在序列的起始位置然后再从剩余未排序元素中继续寻找最小大元素然后放到已排序序列的末尾。以此类推直到全部待排序的数据元素排完。
详细文章描述
https://mp.weixin.qq.com/s/B1QdqyP8HQgOv8tlSujtog
代码实现 /// summary/// 选择排序算法/// /summarypublic static void SelectionSortAlgorithmMain(){int[] array { 64, 25, 12, 22, 11, 99, 3, 100 };Console.WriteLine(原始数组: );PrintArray(array);SelectionSortAlgorithm(array);Console.WriteLine(排序后的数组: );PrintArray(array);}static void SelectionSortAlgorithm(int[] arr){int n arr.Length;for (int i 0; i n - 1; i){// 在未排序部分中找到最小元素的索引int minIndex i;for (int j i 1; j n; j){if (arr[j] arr[minIndex]){minIndex j;}}// 将最小元素与未排序部分的第一个元素交换位置int temp arr[minIndex];arr[minIndex] arr[i];arr[i] temp;}}static void PrintArray(int[] arr){int n arr.Length;for (int i 0; i n; i){Console.Write(arr[i] );}Console.WriteLine();}C#插入排序算法
简介
插入排序算法是一种简单、直观的排序算法其原理是将一个待排序的元素逐个地插入到已经排好序的部分中。
详细文章描述
https://mp.weixin.qq.com/s/YEregZ_GOGgEltGUJadycw
代码实现 public static void InsertionSort(int[] array){int arrayLength array.Length;//数组长度时间复杂度为O(n^2)for (int i 1; i arrayLength; i){//定义临时变量int temp array[i];int j i - 1;while (j 0 array[j] temp){array[j 1] array[j];j--;}array[j 1] temp;}}public static void InsertionSortRun(){int[] array { 26, 15, 5, 3, 38, 36, 44, 27, 47, 2, 46, 4, 50, 19, 48 };Console.WriteLine(排序前: string.Join(, , array));InsertionSort(array);Console.WriteLine(排序后: string.Join(, , array));}C#希尔排序算法
简介
希尔排序简单的来说就是一种改进的插入排序算法它通过将待排序的元素分成若干个子序列然后对每个子序列进行插入排序最终逐步缩小子序列的间隔直到整个序列变得有序。希尔排序的主要思想是通过插入排序的优势减小逆序对的距离从而提高排序效率。
详细文章描述
https://mp.weixin.qq.com/s/_t9QVuj_rLcNomyv7LcGMA
代码实现
public static void ShellSort(int[] array){int arrLength array.Length;// 初始化增量初始间隔为数组长度的一半int gap arrLength / 2;// 不断缩小增量直到增量为1while (gap 0){// 对每个子序列进行插入排序for (int i gap; i arrLength; i){int temp array[i];int j i;// 在子序列内部进行插入排序while (j gap array[j - gap] temp){array[j] array[j - gap];j - gap;}array[j] temp;}// 缩小增量gap / 2;}}public static void ShellSortRun(){int[] array { 19, 20, 22, 32, 34, 50, 99, 49, 1, 11, 11, 55, 35, 93, 96, 71, 70, 38, 78, 48 };Console.WriteLine(排序前数组 string.Join(, , array));ShellSort(array);Console.WriteLine(排序后数组 string.Join(, , array));}C#归并排序算法
简介
归并排序是一种常见的排序算法它采用分治法的思想在排序过程中不断将待排序序列分割成更小的子序列直到每个子序列中只剩下一个元素然后将这些子序列两两合并排序最终得到一个有序的序列。
详细文章描述
https://mp.weixin.qq.com/s/ToURWBfVIl7087Ago8fGdQ
代码实现 public static void MergeSort(int[] arr, int left, int right){if (left right){// 计算中间索引int mid (left right) / 2;// 对左半部分数组进行归并排序MergeSort(arr, left, mid);// 对右半部分数组进行归并排序MergeSort(arr, mid 1, right);// 合并两个有序数组Merge(arr, left, mid, right);}}public static void Merge(int[] arr, int left, int mid, int right){int n1 mid - left 1; // 左半部分数组的长度int n2 right - mid; // 右半部分数组的长度// 创建临时数组int[] leftArr new int[n1];int[] rightArr new int[n2];// 将数据拷贝到临时数组for (int i 0; i n1; i){leftArr[i] arr[left i];}for (int j 0; j n2; j){rightArr[j] arr[mid 1 j];}// 合并两个有序数组int k left; // 初始化合并后的数组索引int p 0; // 初始化左半部分数组的索引int q 0; // 初始化右半部分数组的索引while (p n1 q n2){if (leftArr[p] rightArr[q]){arr[k] leftArr[p];p;}else{arr[k] rightArr[q];q;}k;}// 复制左半部分数组的剩余元素while (p n1){arr[k] leftArr[p];p;k;}// 复制右半部分数组的剩余元素while (q n2){arr[k] rightArr[q];q;k;}}public static void MergeSortRun(){int[] array { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3 };Console.WriteLine(排序前数组 string.Join(, , array));MergeSort(array, 0, array.Length - 1);Console.WriteLine(排序后数组 string.Join(, , array));} C#快速排序算法
简介
快速排序是一种常用的排序算法它基于分治的思想通过将一个无序的序列分割成两个子序列并递归地对子序列进行排序最终完成整个序列的排序。
详细文章描述
https://mp.weixin.qq.com/s/7vms2Q4s7DBdFs31w4cfVA
代码实现 public class 快速排序算法{public static void Sort(int[] array, int low, int high){if (low high){//将数组分割为两部分并返回分割点的索引int pivotIndex Partition(array, low, high);//递归对分割后的两部分进行排序Sort(array, low, pivotIndex - 1);Sort(array, pivotIndex 1, high);}}private static int Partition(int[] array, int low, int high){//选择最后一个元素作为基准元素int pivot array[high];int i low - 1;for (int j low; j high - 1; j){//如果当前元素小于等于基准元素则将它与i1位置的元素交换if (array[j] pivot){i;Swap(array, i, j);}}//将基准元素放置到正确的位置上Swap(array, i 1, high);return i 1; //返回基准元素的索引}private static void Swap(int[] array, int i, int j){int temp array[i];array[i] array[j];array[j] temp;}public static void QuickSortRun(){int[] array { 2, 3, 5, 38, 19, 15, 26, 27, 36, 44, 47, 46, 50, 48, 4 };Sort(array, 0, array.Length - 1);Console.WriteLine(排序后结果 string.Join(, , array));}}C#堆排序算法
简介
堆排序是一种高效的排序算法基于二叉堆数据结构实现。它具有稳定性、时间复杂度为O(nlogn)和空间复杂度为O(1)的特点。
详细文章描述
https://mp.weixin.qq.com/s/zS_ESKzlg05ICqFPIaePkg
代码实现 public static void HeapSort(int[] array){int arrayLength array.Length;//构建最大堆for (int i arrayLength / 2 - 1; i 0; i--)Heapify(array, arrayLength, i);//依次取出堆顶元素并重新调整堆for (int i arrayLength - 1; i 0; i--){//将堆顶元素与当前最后一个元素交换int temp array[0];array[0] array[i];array[i] temp;//重新调整堆Heapify(array, i, 0);}}private static void Heapify(int[] arr, int n, int i){int largest i; //假设父节点最大int left 2 * i 1; //左子节点int right 2 * i 2; //右子节点//如果左子节点大于父节点则更新最大值if (left n arr[left] arr[largest])largest left;//如果右子节点大于父节点和左子节点则更新最大值if (right n arr[right] arr[largest])largest right;//如果最大值不是当前父节点则交换父节点和最大值并继续向下调整堆if (largest ! i){int swap arr[i];arr[i] arr[largest];arr[largest] swap;Heapify(arr, n, largest);}}public static void HeapSortRun(){int[] array { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888, 0, -1 };Console.WriteLine(排序前数组 string.Join(, , array));HeapSort(array);Console.WriteLine(排序后数组 string.Join(, , array));}C#计数排序算法
简介
计数排序是一种非比较性的排序算法适用于排序一定范围内的整数。它的基本思想是通过统计每个元素的出现次数然后根据元素的大小依次输出排序结果。
详细文章描述
https://mp.weixin.qq.com/s/PA5NNqcy3CM9PSncWCsmEg
代码实现
public static void CountingSort(int[] array){int arrayLength array.Length;if (arrayLength 1) return;int min array[0];int max array[0];//找出最大值和最小值for (int i 1; i arrayLength; i){if (array[i] min) min array[i];if (array[i] max) max array[i];}//统计每个元素出现的次数int[] count new int[max - min 1];//统计每个元素出现的次数for (int i 0; i arrayLength; i){count[array[i] - min];}//根据count数组和min值确定每个元素的起始位置for (int i 1; i count.Length; i){count[i] count[i - 1];}//存储排序结果int[] temp new int[arrayLength];//根据count数组和min值确定每个元素在temp数组中的位置for (int i arrayLength - 1; i 0; i--){int index count[array[i] - min] - 1;temp[index] array[i];count[array[i] - min]--;}//将排序结果复制回原数组for (int i 0; i arrayLength; i){array[i] temp[i];}}public static void CountingSortRun(){int[] array { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888};Console.WriteLine(排序前数组 string.Join(, , array));CountingSort(array);Console.WriteLine(排序后数组 string.Join(, , array));}C#桶排序算法
简介
桶排序是一种线性时间复杂度的排序算法它将待排序的数据分到有限数量的桶中每个桶再进行单独排序最后将所有桶中的数据按顺序依次取出即可得到排序结果。
详细文章描述
https://mp.weixin.qq.com/s/YzviDcm3-4E5Wf2jooylJQ
代码实现
public static void BucketSort(int[] array){int arrLength array.Length;if (arrLength 1){return;}//确定桶的数量int maxValue array[0], minValue array[0];for (int i 1; i arrLength; i){if (array[i] maxValue)maxValue array[i];if (array[i] minValue)minValue array[i];}int bucketCount (maxValue - minValue) / arrLength 1;//创建桶并将数据放入桶中ListListint buckets new ListListint(bucketCount);for (int i 0; i bucketCount; i){buckets.Add(new Listint());}for (int i 0; i arrLength; i){int bucketIndex (array[i] - minValue) / arrLength;buckets[bucketIndex].Add(array[i]);}//对每个非空的桶进行排序int index 0;for (int i 0; i bucketCount; i){if (buckets[i].Count 0){continue;}int[] tempArr buckets[i].ToArray();Array.Sort(tempArr);foreach (int num in tempArr){array[index] num;}}}public static void BucketSortRun(){int[] array { 19, 27, 46, 48, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3, 99, 888};Console.WriteLine(排序前数组 string.Join(, , array));BucketSort(array);Console.WriteLine(排序后数组 string.Join(, , array));}C#基数排序算法
简介
基数排序是一种非比较性排序算法它通过将待排序的数据拆分成多个数字位进行排序。
详细文章描述
https://mp.weixin.qq.com/s/dCG-LLim4UGD1kIY2a3hmA
代码实现
public static void RadixSort(int[] array){if (array null || array.Length 2){return;}//获取数组中的最大值确定排序的位数int max GetMaxValue(array);//进行基数排序for (int exp 1; max / exp 0; exp * 10){CountingSort(array, exp);}}private static void CountingSort(int[] array, int exp){int arrayLength array.Length;int[] output new int[arrayLength];int[] count new int[10];//统计每个桶中的元素个数for (int i 0; i arrayLength; i){count[(array[i] / exp) % 10];}//计算每个桶中最后一个元素的位置for (int i 1; i 10; i){count[i] count[i - 1];}//从原数组中取出元素放入到输出数组中for (int i arrayLength - 1; i 0; i--){output[count[(array[i] / exp) % 10] - 1] array[i];count[(array[i] / exp) % 10]--;}//将输出数组复制回原数组for (int i 0; i arrayLength; i){array[i] output[i];}}private static int GetMaxValue(int[] arr){int max arr[0];for (int i 1; i arr.Length; i){if (arr[i] max){max arr[i];}}return max;}public static void RadixSortRun(){int[] array { 19, 27, 46, 48, 99, 888, 50, 2, 4, 44, 47, 36, 38, 15, 26, 5, 3 };Console.WriteLine(排序前数组 string.Join(, , array));RadixSort(array);Console.WriteLine(排序后数组 string.Join(, , array));}