- 浏览: 290483 次
- 性别:
- 来自: 武汉
文章分类
最新评论
-
zh1159007904:
大侠,你这个程序的递归部分看不懂,能不能麻烦解释一下递归的思路 ...
求21位水仙花数(C语言实现) -
shenma_IT:
我是一楼的神马_CS哦 再次表示感谢!!
求21位水仙花数(C语言实现) -
shenma_IT:
好 万分感谢 !!
求21位水仙花数(C语言实现) -
Touch_2011:
shenma_CS 写道你好! 我看了你的代码 有好多让我佩服 ...
求21位水仙花数(C语言实现) -
Touch_2011:
乘法是模拟数学上两个数相乘,但在处理进位方面可能有点不同。比如 ...
求21位水仙花数(C语言实现)
/* * 各种基本排序算法实现(以由小到大为例) */ #include<stdio.h> #define ARRAY_LENGTH 50 //插入排序 void inseartSort(int a[],int length) { int i,j,index,temp; for(i=0;i<length;i++){//数组a中元素逐个有序插入数组a for(j=0;j<i;j++) //寻找第i个元素的插入位置 if(a[i]<a[j]) break; index=j; temp=a[i]; for(j=i;j>index;j--)//移位 a[j]=a[j-1]; a[index]=temp; } } //快速排序 void quickSort(int a[],int length) { int i=0,j=length-1; //i指向数组头元素,j指向数组尾元素 int index=0; //指向中间值 int m=0; //双向搜索,判断是i加还是j减 if(length<=0) return; while(i<=j){ //一趟快速排序 if(!m){ if(a[j]<a[index]){//交换a[j]和a[index] a[j]=a[index]+a[j]; a[index]=a[j]-a[index]; a[j]=a[j]-a[index]; index=j; m=1; } j--; }else{ if(a[i]>a[index]){ a[i]=a[index]+a[i]; a[index]=a[i]-a[index]; a[i]=a[i]-a[index]; index=i; m=0; } i++; } } quickSort(a,index); quickSort(a+index+1,length-index-1); } //希尔排序 void shellSort(int a[],int length) { int b[ARRAY_LENGTH]; //辅助数组 int d,k,j,i; d=length/2; //增量 while(d>0){ for(k=0;k<d;k++){ j=0; for(i=k;i<length;i+=d)//把a中要排序的元素复制到b数组 b[j++]=a[i]; inseartSort(b,j); j=0; for(i=k;i<length;i+=d)//把排好序的元素放回a数组 a[i]=b[j++]; } if(d==1)//增量为1,最后一趟插入排序排完 break; d/=2; if(d==0) d=1; } } //归并排序 void mergeSort(int a[],int length) { int d=2,i; //d为归并的子列中每一个子列包含的元素个数 while(d<length){ for(i=0;i+d<=length;i+=d) //一趟归并 inseartSort(a+i,d); d*=2; } //收尾处理,因为可能有没处理完的子列(这个子列的元素个数小于d) inseartSort(a,length); } //基数排序 void radixSort(int a[],int length) { int b[ARRAY_LENGTH]; //存放a中元素取出的各个位数上的数字 int i,index,j,temp,step=1; for(i=0;i<length;i++)//a中各个元素复制到b b[i]=a[i]; while(1){ for(i=0;i<length;i++)//取b中各个元素的个位数 b[i]=b[i]%10; //对b数组进行排序,a数组按各个位数上的数字大小进行排序 for(i=0;i<length;i++){ index=i; for(j=i;j<length;j++) if(b[j]<b[index]) index=j; temp=b[i]; b[i]=b[index]; b[index]=temp; temp=a[i]; a[i]=a[index]; a[index]=temp; } for(i=0;i<length;i++) b[i]=a[i]/(10*step); for(i=0;i<length;i++)//判断b中的元素是否全是0 if(b[i]!=0) break; if(i==length)//b中元素全是0 break; step*=10; } } /*********************** 以下是堆排序的实现 ***********************/ //筛选法调整堆,i指向要调整的元素 void sift(int a[],int length,int i) { int j=2*(i+1)-1; //j指向i的左孩子 int index=j; //index指向某个元素的左右孩子中较大的一个 int temp; if(j>=length) //i为叶子节点 return; if(j+1<length) index=a[j]>a[j+1]?j:j+1; if(a[i]<a[index]){//如果父亲结点小于孩子结点,交换 temp=a[i]; a[i]=a[index]; a[index]=temp; sift(a,length,index); //可能破坏了左子树或右子树的排序,对子树进行筛选法调整 } } //堆排序(大顶堆) void heapSort(int a[],int length) { int i; //i指向要调整的元素,从length/2开始 int temp; //从length/2个元素开始调整堆 for(i=length/2-1;i>=0;i--){ sift(a,length,i); } //取堆顶元素,最后一个元素代替第一个元素。然后调整堆 for(i=length-1;i>0;i--){ temp=a[0]; a[0]=a[i]; a[i]=temp; sift(a,i,0); } } /*********************** 以上是堆排序的实现 ***********************/ void main() { int i; int a[]={5,3,5,6,12,33,24,10,22,8}; int b[10]; //待排序序列 printf("待排序序列:"); for(i=0;i<10;i++) b[i]=a[i]; for(i=0;i<10;i++) printf("%-4d",b[i]); printf("\n\n"); //测试插入排序 printf("插入排序 :"); inseartSort(b,10); for(i=0;i<10;i++) printf("%-4d",b[i]); printf("\n\n"); //测试快速排序 printf("快速排序 :"); for(i=0;i<10;i++) b[i]=a[i]; quickSort(b,10); for(i=0;i<10;i++) printf("%-4d",b[i]); printf("\n\n"); //测试希尔排序 printf("希尔排序 :"); for(i=0;i<10;i++) b[i]=a[i]; shellSort(b,10); for(i=0;i<10;i++) printf("%-4d",b[i]); printf("\n\n"); //测试归并排序 printf("归并排序 :"); for(i=0;i<10;i++) b[i]=a[i]; mergeSort(b,10); for(i=0;i<10;i++) printf("%-4d",b[i]); printf("\n\n"); //测试基数排序 printf("基数排序 :"); for(i=0;i<10;i++) b[i]=a[i]; radixSort(b,10); for(i=0;i<10;i++) printf("%-4d",b[i]); printf("\n\n"); //测试堆排序 printf("堆排序 :"); for(i=0;i<10;i++) b[i]=a[i]; heapSort(b,10); for(i=0;i<10;i++) printf("%-4d",b[i]); printf("\n\n"); }
- 各中排序算法.zip (2 KB)
- 下载次数: 15
发表评论
-
二叉查找树(二叉排序树)的详细实现
2011-10-22 13:18 1355博客地址: http://blog.csdn.net/tou ... -
确定参赛者名单(C语言实现)
2011-07-10 10:39 1648/* 2011第二届国信蓝点 ... -
整数划分(C语言实现)
2011-07-10 10:35 5052/* 整数的划分问题。 如,对于正整数n=6,可以分划为 ... -
几种全排列的算法(C语言实现)
2011-07-07 00:14 6409/* * 几种排列组合的算法 */ #incl ... -
Playfire加密算法(C语言实现)
2011-07-06 10:13 3048这是C语言选拔赛最后一题,题目如下: /* ... -
浅析贪心算法
2011-07-05 17:46 14431.基本思路: a.顾名思义,贪心算法总是作出在当前看来最好 ... -
浅析动态规划算法
2011-07-05 15:30 18591、 ... -
浅析递归
2011-07-02 20:40 21571.递归的思想: 设计一个递归函数,明确这个递归函数的定义, ... -
浅析分治法
2011-07-02 13:54 23631、分治法思想: 将一个难以直接解决的大问题,分割成一些规模 ... -
浅析回溯算法
2011-06-29 22:48 29501、回溯法的基本思想 (1)在确定解空间的组织结构 ... -
高精度计算
2011-06-27 14:06 10791.大整数加法 2.大整数减法 3.大整数乘法 4.大整 ... -
浅析模拟算法
2011-06-27 07:58 19221.描述 有些问题难以找到公式或规律来解决,可以按 ... -
农夫过河的四种解法
2011-06-25 14:21 7002/* * 题目描述:有一个农夫,带着一只狼、一只羊、一颗白 ... -
二叉查找树(C语言实现)
2011-06-15 23:47 2626/* * 构造一颗二叉查找树,实现树的插入、删除等基本操作 ... -
哈希表查找(C语言实现)
2011-06-15 13:38 11469/* * 题目:给定一个全部由字符串组成的字典,字符串全部 ... -
索引查找之英语词典(C语言实现)
2011-06-14 22:48 5576/* * 题目:英语词典。所有的单词存放在dictionary ... -
求最短路径的两种算法(C语言实现)
2011-06-11 11:23 28461求这个有向网中任意两点的最短路径 /* ... -
拓扑排序(C语言实现)
2011-06-10 23:09 3217对这个有向图进行拓扑排序 /* * 拓扑排序(采用邻 ... -
最小生成树(C语言实现)
2011-06-10 21:30 8883求这个网的最小生成树 /* * 普里姆算法和克鲁斯卡 ... -
邻接表存储的有向图的基本操作(C语言实现)
2011-06-06 11:47 14026/* * 邻接表存储的有向图的基本操作 */ #in ...
相关推荐
本资源提供了各种常用排序算法的C语言实现,源自严蔚敏的经典教材《数据结构》。下面将详细介绍这些排序算法及其在C语言中的实现原理。 1. 冒泡排序(Bubble Sort) 冒泡排序是最基础的排序方法,通过不断交换相邻...
二叉树建立遍历冒泡排序快速排序算法:C语言编程实现10个数据结构课程设计实例.zip 二叉树建立遍历冒泡排序快速排序算法:C语言编程实现10个数据结构课程设计实例.zip 二叉树建立遍历冒泡排序快速排序算法:C语言...
一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序
根据给定文件的信息,我们可以详细地探讨几种不同的排序算法及其在C语言中的实现方式。这里主要涉及的选择排序、直接插入排序、冒泡排序以及堆排序是计算机科学领域中非常基础且重要的排序方法。 ### 一、选择排序 ...
C语言实现的堆排序算法。 提供了堆排序算法的一个接口,可以为其它功能提供功能。
冒泡排序算法两种C语言实现方法,在VC开发环境下验证通过
本资源提供了三种经典的排序算法的C语言实现:堆排序、直接插入排序和快速排序。 首先,让我们详细了解这些排序算法。 1. **直接插入排序**: 直接插入排序是一种简单的排序算法,它的工作原理类似于我们手动排序...
冒泡排序算法选择排序算法插入排序c语言实现
总的来说,"各种并行排序算法的C语言实现代码"这个压缩包提供了丰富的学习材料,可以帮助开发者理解和掌握并行排序的实现技术。通过对这些源代码的研究,我们可以更好地应用并行计算,提升大规模数据处理的效率。
本项目“经典排序算法(C语言实现)”提供了C语言版本的多种常见排序算法实现,对于学习和理解排序算法有极大的帮助。下面我们将深入探讨这些排序算法的核心原理及其C语言实现。 1. 冒泡排序(Bubble Sort) 冒泡...
合并排序算法的C语言实现,在VC开发环境下验证通过
本资源提供的是C语言实现的各种排序算法,其中包括快速排序(Quick Sort)算法,同时也考虑了在大量数据中快速找到最大N个数的场景。 首先,让我们来探讨一下排序算法。排序是指将一组数据按照特定的顺序排列,常见...
数据结构中的二叉排序树实现算法,C语言~~~~~~~~~~~~
- 第一部分可能包含简单的排序算法,如冒泡排序、选择排序或插入排序。这些是最基础的算法,帮助初学者理解排序过程。 - 冒泡排序通过不断交换相邻的错误顺序元素来逐步排序数组。 - 选择排序每次找出未排序部分...
排序算法实现
在这个压缩包文件"sort_0512"中,包含了七种经典的排序算法的C语言实现,分别是冒泡排序、插入排序、选择排序、希尔排序、快速排序、归并排序和堆排序。接下来,我们将对这些排序算法进行深入的探讨。** **1. 冒泡...
本资源“排序算法的C语言实现”提供了一系列经典的排序算法,包括插入排序、选择排序、冒泡排序、快速排序和归并排序。下面将详细介绍这些排序算法及其C语言实现的关键点。 1. 插入排序(Insertion Sort): 插入...
常见经典排序算法(C语言)
《算法:C语言实现(第1-4部分)基础知识、数据结构、排序及搜索(原书第3版)》细腻讲解计算机算法的C语言实现。全书分为四部分,共16章。包括基本算法分析原理,基本数据结构、抽象数据结构、递归和树等数据结构知识,...
完整的实现了归并排序的算法,使用C语言实现,相信看过本程序之后,会对归并排序了如指掌