
几种排序
huang_zhi_yi
这个作者很懒,什么都没留下…
展开
-
选择排序
选择排序 选择排序 --简单选择排序 时间复杂度:O(n*n) void selectSort(int a[], int n){ int key, tmp; for(int i = 0; i< n; ++i) { key = SelectMinKey(a, n,i); //选择最小的元素 key为当前找着的最小元素下标 ...原创 2019-02-26 14:20:47 · 139 阅读 · 0 评论 -
冒泡排序
冒泡排序 简单冒泡排序: 从下标为0的元素开始,和相邻的下一个元素比较大小,以此重复直到数组末尾,每次排序完的结果是把最大的元素的排到数组的末尾,并且下次比较次数可以减一,即,重复直到数组末尾-1; //N表示为元素个数 void Bundle_sort(ElementType A[],int N){ for(p=N-1;p>=0;p--){ //每次排序过后,比较次数减一 ...原创 2019-02-26 14:21:01 · 128 阅读 · 0 评论 -
快速排序
快速排序 快速排序 其思想是:先选一个“标尺”, 用它把整个队列过一遍筛子, 以保证:其左边的元素都不大于它,其右边的元素都不小于它。这样,排序问题就被分割为两个子区间。 再分别对子区间排序就可以了。 每次“标尺”被选取后,其肯定被放在最终的位置上。即每次调用的结果----主元排好了序,时间复杂度为 O(nlogn) void quick_sort(int s[], int l, int r)...原创 2019-02-26 14:21:12 · 122 阅读 · 0 评论 -
归并排序
归并排序 归并排序: 针对两个有序子列的排序 时间复杂度为 O(n) /*L为左边起始位置,R为右边起始位置,RightEnd为右边终点位置*/ void Marge(ElementType A[],ElementType Temp[],int L,int R,int RightEnd){ LeftEnd=R-1; //LeftEnd为左边终点位置 Tem=L; //存放结果...原创 2019-02-26 14:21:26 · 110 阅读 · 0 评论 -
堆排序
堆排序 堆排序的基本思想: 将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。 堆排序的基本思路: a.将无需序列构建成一个堆,根据升序降序需求选择大顶堆或小顶堆; b.将堆顶元素与末尾元素交换,将最大元素"沉"到数组末端;...原创 2019-02-26 14:21:37 · 141 阅读 · 0 评论 -
插入排序
插入排序 插入排序: **外层循环开始,**从第二个元素开始,抽出一个元素作为要插入的元素,**内层循环开始,**然后从数组末尾开始比较,若有元素严格大于此插入元素,则往后移一位,内层循环结束,这时把插入元素放到移出来的空位上,外层循环结束。 void InsertSort(ElementType A[],int N) { for(p=1;p<N;p++){ Tem=A[p]; /...原创 2019-02-26 14:21:52 · 140 阅读 · 0 评论