Linux C语言 33-排序算法
本节关键字:C语言 排序算法 选择排序 冒泡排序 快速排序
相关C库函数:
冒泡排序
冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。
void BubbleSort(int* a, int n)
{for (int i = 0; i < n; i++){int exchange = 0;// 单趟for (int j = 1; j < n - i; j++){if (a[j - 1] > a[j]) {exchange = 1;Swap(&a[j - 1], &a[j]);}}if (exchange == 0) //已经有序了break;}
}
选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
void SelectSort(int* a, int n)
{int left = 0;int right = n - 1;while (left<right){int mini = left, maxi = left;for (int i = left+1; i <= right; i++){if (a[i] < a[mini]) mini = i;if (a[i] > a[maxi])maxi = i;}Swap(&a[mini], &a[left]);if (maxi == left) //防止掉包(很容易漏,很重要!maxi = mini;Swap(&a[maxi], &a[right]);left++;right--;}
}
快速排序
在区间中随机挑选一个元素作基准,将小于基准的元素放在基准之前,大于基准的元素放在基准之后,再分别对小数区与大数区进行排序。
void QuickSort(int* a, int begin, int end)
{// 子区间相等只有一个值或者不存在那么就是递归结束的子问题if (begin >= end)return;if (end - begin + 1 <= 13){InsertSort(a + begin, end - begin + 1);} else{int keyi = PartSort3(a, begin, end);// [begin, keyi-1]keyi[keyi+1, end];QuickSort2(a, begin, keyi - 1);QuickSort2(a, keyi + 1, end);}
}
插入排序
待补充 …
希尔排序
待补充 …