七种排序算法(更新中。。。)

  1 #include<iostream>
  2 #include<cstdlib>
  3 #include<ctime>
  4 using namespace std;
  5 const int len = 20;
  6 //1、冒泡排序
  7 void Bubble_sort(int s[],int len){
  8     bool flag;
  9     for(int i=1;i<len-1;++i){
 10         flag=false;
 11         for(int j=1;j<=len-i;++j)
 12             if(s[j]>s[j+1]){flag=true;swap(s[j],s[j+1]);}
 13         if(!flag)break;
 14     }
 15 }
 16 //2、选择排序
 17 void Select_sort(int s[],int len){
 18     int k;
 19     for(int i=1;i<len;++i){
 20         k=i;
 21         for(int j=i+1;j<=len;++j)
 22             if(s[k]>s[j])k=j;
 23         if(k!=i)swap(s[i],s[k]);
 24     }
 25 }
 26 //3、插入排序
 27 void Insert_sort(int s[],int len){
 28     for(int i=2;i<=len;++i){
 29         int tmp=s[i],j;
 30         for(j=i-1;j>0&&tmp<s[j];--j);
 31         for(int k=i;k>j+1;--k)s[k]=s[k-1];
 32         s[j+1]=tmp;
 33     }
 34 }
 35 //4、快速排序
 36 int Quick_sort(int s[],int low,int high){
 37     int tmp=s[low];//首元素是枢轴
 38     while(low<high){//待排序序列长度大于1
 39         while(low<high&&tmp<=s[high])--high;//大于枢轴的元素依旧在右边
 40         s[low]=s[high];//将小于枢轴的元素放左边
 41         while(low<high&&tmp>=s[low])++low;//小于枢轴的元素依旧在左边
 42         s[high]=s[low];//将大于枢轴的元素放右边
 43     }
 44     s[low]=tmp;//枢轴记录到位
 45     return low;//返回枢轴的位置
 46 }
 47 void Qsort(int s[],int low,int high){
 48     if(low<high){
 49         int key=Quick_sort(s,low,high);
 50         Qsort(s,low,key-1);
 51         Qsort(s,key+1,high);
 52     }
 53 }
 54 //5、希尔排序(采用直接插入)
 55 void Shell_sort(int s[],int len){
 56     for(int step=len/2;step>0;step/=2){//设置步长
 57         for(int i=step;i<=len;++i){
 58             int tmp=s[i],j;
 59             for(j=i-step;j>0&&tmp<s[j];j-=step);
 60             for(int k=i;k>j+step;k-=step)s[k]=s[k-step];
 61             s[j+step]=tmp;
 62         }
 63     }
 64 }
 65 //6、归并排序
 66 void Merge(int s[],int t[],int low,int mid,int high){
 67     int i=low,j=mid+1,k=low;
 68     while(i<=mid&&j<=high){
 69         if(s[i]<=s[j])t[k++]=s[i++];
 70         else t[k++]=s[j++];
 71     }
 72     while(i<=mid)t[k++]=s[i++];
 73     while(j<=high)t[k++]=s[j++];
 74     for(int i=low;i<=high;++i)s[i]=t[i];//将区间[low,high]拷贝到原来数组a的位置,表示该区间元素已经排好序
 75 }
 76 void Merge_sort(int s[],int t[],int low,int high){
 77     if(low<high){
 78         int mid=(low+high)/2;
 79         Merge_sort(s,t,low,mid);//递归分成左部分
 80         Merge_sort(s,t,mid+1,high);//递归分成右部分
 81         Merge(s,t,low,mid,high);//将两部分归并
 82     }
 83 }
 84 //打印数组值
 85 void print(int s[],int len){
 86     for(int i=1;i<=len;++i)
 87         cout<<s[i]<<(i==len?"\n":" ");
 88 }
 89
 90 int main(){
 91     int *s=new int[len+1];
 92     int *t=new int[len+1];//t为辅助数组
 93     srand((unsigned)time(NULL));
 94     for(int i=1;i<=len;++i)s[i]=rand();
 95     print(s,len);//打印原数组
 96     /*1、冒泡排序
 97     Bubble_sort(s,len);*/
 98     /*2、选择排序
 99     Select_sort(s,len);*/
100     /*3、插入排序
101     Insert_sort(s,len);*/
102     /*4、快速排序
103     Qsort(s,1,len);*/
104     /*5、希尔排序
105     Shell_sort(s,len);*/
106     /*6、归并排序
107     Merge_sort(s,t,1,len);*/
108     print(s,len);//排序后的数组
109
110     delete[]s;//释放内存
111     delete[]t;
112     return 0;
113 }

原文地址:https://www.cnblogs.com/acgoto/p/9211511.html

时间: 2024-11-01 15:30:57

七种排序算法(更新中。。。)的相关文章

模板化的七种排序算法,适用于T* vector&lt;T&gt;以及list&lt;T&gt;

最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板纯属于偷懒,更方便于测试代码的有效性,等代码写完也懒得去改了.下面开始介绍这段代码,有什么不对的地方欢迎前来指正. 一共写了七种排序,插入排序InsertSort.堆排序HeapSort.快速排序QuickSort.合并排序MergeSort,计数排序CountingSort,基数排序RadixSo

[数据结构(二)]七种排序算法的C++简单实现

一.冒泡排序(Bubble Sort) 基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止. //冒泡排序 void BubbleSort(int *p, int length) { for (int i = 0; i < length-1; i++) { for (int j =length-1; j>=i;j--) { if (p[j-1] > p[j]) { swap(p[j-1], p[j]); } } } } 排序前的顺序为:9 1 5 8 3 7 4

七种排序算法

  方法 时间复杂度 空间复杂度 Stable 冒泡排序(Bubble Sort) O(n) — O(n^2) O(1) yes 选择排序(Selection Sort) O(n^2) — O(n^2) O(1) no 插入排序(Insertion Sort) O(n) — O(n^2) O(1) yes 希尔排序(Shell Sort) O(n) — O(n log^2 n) O(1) no 快速排序(Quick Sort) O(n log n) — O(n log n) — O(n^2) O

七种排序算法的实现和总结

最近把七种排序算法集中在一起写了一遍. 注释里有比较详细的说明. 1 /*排序算法大集合**/ 2 #include <stdio.h> 3 #include <string.h> 4 #include <stdlib.h> 5 6 //------------------快速排序------------------// 7 /* 8 核心: 9 如果你知道多少人该站你前面,多少人站你后面,你一定知道你该站哪个位置. 10 算法: 11 1.选取分界数,参考这个分界数,

12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

出处:http://blog.csdn.net/han_xiaoyang/article/details/12163251. 声明:版权所有,转载请注明出处,谢谢. 0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综

学习Java绝对要懂的,Java编程中最常用的几种排序算法!

今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来!     ,群里有免费的学习视频和项目给大家练手.大神有空时也会带带大家的,学Java的过程中一定要多问多记,不要怕问题,要去主动的解决问题. 冒泡排序 选择排序 插入排序 归并排序 例如:降序排{10,5,9,6}分为{10,5},{9,6}然后{5,10},{6,9}然后完成 快速排序 就最后一个快速排序可能大家看不太懂,我就举个例子吧 开始输入以下数组

总结N种排序算法及实现

排序算法是一个简单的问题,但在此问题上却有大量的研究!当前的排序算法通常按照如下四个方面进行分类(或是评价): 1.时间复杂度:一个排序算法的理想性能是O(n).一般而言,好的性能O(nlogn),坏的性能O(n2). 2.空间复杂度(内存使用量) 3.稳定性:稳定的排序算法会让原本有相等键值的记录维持原本的相对次序. 4.排序方式:插入.交换.选择.合并等 一.冒泡排序:这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端. 步骤:1.比较相邻的两个元素,如果第一个比第二个大,就

八种排序算法(内部排序)

八种排序算法很长时间没有使用了,今天做一个总结,方便以后自己用的时候参考. 这八种排序算法都是内部算法,这八种排序算法分别是: 1. 插入排序 1)直接插入排序 2)希尔排序 2.选择排序 1)简单选择排序 2)堆排序 3.交换排序 1)冒泡排序 2)快速排序 4.归并排序 5.基数排序 一.直接插入排序 将一个记录插入到已经排好序的有序表中,从而得到一个新的.记录数增1的有序表.在实际操作中,先将序列的第一个记录看成是一个有序的子序列,然后从第二个.第三个.……记录逐个进行插入,直至整个序列有

13种排序算法详解

0.前言 从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学算法就是用这种比较笨的刷题学的,囧),不过又想了想,算法这东西,博主自己学的过程中一直深感,基础还是非常重要的,很多难题是基础类数据结构和题目的思想综合发散而来.比如说作为最基本的排序算法就种类很多,而事实上笔试面试过程中发现掌握的程度很一般,有很多题目,包括很多算法难题,其母题或者基本思想就是基于这些经典算法的,