`
carus
  • 浏览: 29444 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

各种排序算法

 
阅读更多

C代码  收藏代码
  1. #include <stdio.h>  
  2. #define N 5  
  3.   
  4. //从小到大  
  5. void bubbleSort(int p[]){  
  6.     int i=0,j=0,min=0;  
  7.     for(i=0;i<N;i++)  
  8.         for(j=N-1;j>i;j--){  
  9.             if(p[j]<p[j-1]){  
  10.                 min=p[j-1];  
  11.                 p[j-1]=p[j];  
  12.                 p[j]=min;  
  13.             }  
  14.         }  
  15. }  
  16. //从大到小  
  17. void bubbleSort2(int p[]){  
  18.     int i=0,j=0,min=0;  
  19.     for(i=0;i<N-1;i++)  
  20.         for(j=i;j<N-1;j++){  
  21.             if(p[j]<p[j+1]){  
  22.                 min=p[j];  
  23.                 p[j]=p[j+1];  
  24.                 p[j+1]=min;  
  25.             }  
  26.         }  
  27. }  
  28. //从小到大  
  29. void selectSort(int *p){  
  30.     int i=0,j=0,temp=0,min=0;  
  31.     for(i=0;i<N-1;i++){  
  32.         min=i;  
  33.         for(j=i+1;j<N;j++){  
  34.             if(p[j]<p[min]){  
  35.                 min=j;  
  36.             }  
  37.         }  
  38.         if(min!=i){  
  39.             temp=p[i];  
  40.             p[i]=p[min];  
  41.             p[min]=temp;  
  42.         }  
  43.     }  
  44. }  
  45.   
  46. //从大到小  
  47. void selectSort2(int *p){  
  48.     int i=0,j=0,temp=0,max=0;  
  49.     for(i=0;i<N-1;i++){  
  50.         max=i;  
  51.         for(j=i+1;j<N;j++){  
  52.             if(p[j]>p[max]){  
  53.                 max=j;  
  54.             }  
  55.         }  
  56.         if(max!=i){  
  57.             temp=p[i];  
  58.             p[i]=p[max];  
  59.             p[max]=temp;  
  60.         }  
  61.     }  
  62. }  
  63.   
  64. void insertSort(int p[]){  
  65.     int i=0,j=0,temp=0;  
  66.     for(i=1;i<N;i++){  
  67.         if(p[i]<p[i-1])  
  68.         {  
  69.             temp=p[i];  
  70.             for(j=i-1;temp<p[j]&&j>=0;j--)  
  71.             {  
  72.                     p[j+1]=p[j];  
  73.             }  
  74.             p[j+1]=temp;  
  75.         }  
  76.     }  
  77. }  
  78.   
  79. void shellSort(int * p){  
  80.     int i=0,j=0,temp=0;  
  81.     int increment=N-1;  
  82.     while(increment>1){  
  83.         increment=increment/3+1;  
  84.         for(i=increment;i<N;i++){  
  85.             if(p[i]<p[i-increment]){  
  86.                 temp=p[i];  
  87.                 for(j=i-increment;j>=0&&temp<p[j];j-=increment)  
  88.                     p[j+increment]=p[j];  
  89.                 p[j+increment]=temp;  
  90.             }  
  91.         }  
  92.     }  
  93. }  
  94.   
  95. void heapAdjust(int *p,int i,int j){  
  96.     int lchild=2*i+1;  
  97.     int rchild=2*i+2;  
  98.     int max=i;  
  99.     int temp;  
  100.     if(i<=(N-1)/2){  
  101.         if(lchild<=N-1&&p[lchild]>max)  
  102.             max=lchild;  
  103.         if(rchild<=N-1&&p[rchild>max])  
  104.             max=rchild;  
  105.         if(max!=i)  
  106.         {  
  107.             temp=p[i];  
  108.             p[i]=p[max];  
  109.             p[max]=temp;  
  110.             heapAdjust(p,max,N-1);  
  111.         }  
  112.     }  
  113. }  
  114.   
  115. void heapSort(int *p){  
  116.     int i=0,temp=0;  
  117.     for(i=(N-1)/2;i>=0;i--){  
  118.         heapAdjust(p,i,N-1);  
  119.     }  
  120.     for(i=N-1;i>=0;i--){  
  121.         temp=p[i];  
  122.         p[i]=p[0];  
  123.         p[0]=temp;  
  124.         heapAdjust(p,0,i-1);  
  125.     }  
  126. }  
  127.   
  128. void merge(int *p,int low,int mid,int high){  
  129.     int i=low,j=mid+1,k=0;  
  130.     int array[10];  
  131.     while(i<=mid&&j<=high){  
  132.         array[k++]=p[i]<=p[j]?p[i++]:p[j++];  
  133.     }  
  134.     while(i<=mid)  
  135.         array[k++]=p[i++];  
  136.     while(j<=high)  
  137.         array[k++]=p[j++];  
  138.     for(i=low,k=0;i<=high;k++,i++)  
  139.         p[i]=array[k];  
  140. }  
  141.   
  142. void mergeSort(int *p,int low,int high){  
  143.     int mid;  
  144.     if(low<high){  
  145.         mid=(low+high)/2;  
  146.         mergeSort(p,low,mid);  
  147.         mergeSort(p,mid+1,high);  
  148.         merge(p,low,mid,high);  
  149.     }  
  150. }  
  151.   
  152. void quickSort(int p[],int left,int right){  
  153.     int i,j,x,temp,k;  
  154.     if(left<right){  
  155.         i=left-1;  
  156.         x=p[right];  
  157.         for(j=left;j<right;j++){  
  158.             if(p[j]<=x){  
  159.                 i++;  
  160.                 temp=p[i];p[i]=p[j];p[j]=temp;  
  161.             }  
  162.         }  
  163.         temp=p[i+1];p[i+1]=x;p[right]=temp;  
  164.         quickSort(p,left,i);  
  165.         quickSort(p,i+2,right);  
  166.     }     
  167. }  
  168. //位图排序,时间复杂度O(n)  
  169. void bitmapSort(){  
  170.     int unsort[]={3,5,4,2,1,7,6,8,10,9};  
  171.     int x=0,i=0;  
  172.     for(i=0;i<10;i++){  
  173.         x=x|(0x01<<(unsort[i]%32));  
  174.     }  
  175.     for(i=0;i<32;i++){  
  176.         if((x&(0x01<<i))==(0x01<<i))  
  177.             printf("%d ",i);  
  178.     }  
  179. }  
  180.   
  181. void main(){  
  182.     int unsort[]={4,3,5,6,1,2},i;  
  183.     quickSort(unsort,0,5);    
  184.     for(i=0;i<6;i++)  
  185.     printf("%d ",unsort[i]);  
  186.     bitmapSort();  
  187. }  
分享到:
评论

相关推荐

    各种排序算法比较

    ### 各种排序算法比较 #### 一、稳定性比较 稳定性是排序算法中一个重要的特性,指的是相等的元素在排序前后保持原有的相对位置不变。根据文档提供的信息,我们可以总结出以下结论: - **稳定排序**:插入排序、...

    各种排序算法的实验(源代码+实验报告)

    本资源“各种排序算法的实验(源代码+实验报告)”提供了一个全面的平台,用C++语言实现了多种经典的排序算法,并附带了详细的实验报告,便于学习者理解和掌握这些算法。 1. **快速排序**:由英国计算机科学家C.A.R...

    数据结构 各种排序算法

    在C++编程中,实现各种排序算法能够帮助理解它们的工作原理,并且可以对比不同算法在不同情况下的性能。以下是几种常见的排序算法的详细说明: 1. 直接插入排序(Insertion Sort): 直接插入排序是一种简单的排序...

    总结了各种排序算法,并用C++代码实现,并有演示

    本资源"总结了各种排序算法,并用C++代码实现,并有演示",提供了丰富的学习材料,包括不同类型的排序算法以及它们的C++实现,还有可能的可视化演示,帮助理解每种算法的工作原理。 首先,让我们逐一了解常见的排序...

    各种排序算法的稳定性和时间复杂度总结

    ### 各种排序算法的稳定性和时间复杂度总结 #### 排序算法的稳定性与时间复杂度概述 在计算机科学中,排序算法是基础且重要的组成部分,用于将一系列数据按照特定顺序排列。排序算法的效率通常由其时间复杂度决定...

    c#各种排序算法动态图形演示-数据结构经典算法动态演示

    本资源"c#各种排序算法动态图形演示-数据结构经典算法动态演示"显然是一个专注于通过动态图形展示C#中不同排序算法工作原理的教学资料。 首先,让我们深入了解一下几种常见的排序算法: 1. 冒泡排序(Bubble Sort...

    各种排序算法的比较程序

    标题中的“各种排序算法的比较程序”指的是一个软件或代码集合,它包含了多种排序算法的实现,并且能够对比这些算法的性能。这个程序通常用于教学、研究或优化目的,帮助我们理解不同排序算法的效率差异。 排序算法...

    利用前端动画实现算法可视化,比如各种排序算法动画实现.zip

    这个名为"利用前端动画实现算法可视化,比如各种排序算法动画实现.zip"的资源包,旨在帮助我们利用前端技术来动态演示算法的过程,特别是各种排序算法。这不仅能够帮助初学者更好地理解算法的工作原理,也对专业...

    数据结构课程设计各种排序算法比较.doc

    《数据结构课程设计:各种排序算法比较》 在数据结构的学习中,排序算法是一个重要的章节,它涉及到如何高效地组织和处理数据。本课程设计旨在深入比较和理解几种常见的排序算法,包括直接插入排序、冒泡排序、选择...

    各种排序算法性能的比较

    各种排序算法性能的比较 在计算机科学中,排序算法是将一组数据按照一定的顺序排列的过程。排序算法的性能直接影响到数据处理和分析的效率。本课程设计中,我们将对八种内部排序算法的性能进行分析和比较。 1. ...

    各种排序算法的实现

    各种排序算法的实现

    各种排序算法大全排序 各种排序算法大全

    本资源集合提供了各种排序算法的C语言实现,这对于理解和优化代码的运行效率至关重要。下面,我们将详细讨论这些排序算法及其特点。 1. 冒泡排序(Bubble Sort):冒泡排序是最基础的排序算法之一,通过不断交换...

    各种排序算法小结

    ### 各种排序算法小结 #### 一、引言 排序算法是在计算机科学中非常基础且常用的一类算法。由于在实际应用中往往需要处理大量数据,因此对排序算法的效率有着较高要求。通常,我们会关注算法的时间复杂度来评估其...

    各种排序算法大全

    本资源“各种排序算法大全”集合了多种经典的排序算法,旨在帮助初学者理解和掌握排序的基本原理,并为编程人员提供实用的工具类。下面我们将深入探讨这些排序算法的核心概念及其应用。 1. 冒泡排序(Bubble Sort)...

    Java各种排序算法代码.zip

    这个名为"Java各种排序算法代码.zip"的压缩包包含了一系列实现不同排序算法的Java源代码。排序算法是计算机科学中的基本概念,用于对一组数据进行排列。下面将详细讨论这些算法及其在Java中的实现。 1. 冒泡排序...

    各种排序算法的FLASH演示

    这里我们主要探讨的是"各种排序算法的FLASH演示",这通常是指一系列通过Flash动画展示的排序算法工作原理。Flash是一种交互式矢量图形和多媒体平台,它能够生动形象地展示算法的动态过程。 1. **冒泡排序**: 冒泡...

    采用各种排序算法,支持任意类型数据的小型排序系统

    在IT行业中,排序系统是必不可少的一部分,特别是在大数据处理和算法设计中。本项目是一个小型的排序...开发者可以根据实际需求选择合适的排序方法,同时也可以通过这个系统学习和理解各种排序算法的原理和性能差异。

    IOS版各种排序算法

    总之,理解并掌握各种排序算法对于iOS开发者来说至关重要。无论是冒泡排序的简单实现,快速排序的高效性,还是通过汉诺塔问题学习递归,都能在不同的场景下发挥重要作用。而排序模型图则为学习和教学提供了直观的...

    数据结构各种排序算法实现及比较

    数据结构各种排序算法实现及比较 在本文中,我们将讨论各种排序算法的实现和比较,包括简单选择排序、直接插入排序、希尔排序、冒泡排序、快速排序等。这些算法都是数据结构课程设计报告中常用的排序算法。 简单...

Global site tag (gtag.js) - Google Analytics