#include "stdio.h"
#include "stdlib.h"
void swap(int a[],int i,int j)
{
int temp;
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
/*选择排序数组实现 每次从无序区里面选择一个最小的数插入到有序区 有序区从0开始即开始无元素*/
void selectSort(int a[],int l)
{
int i,j,index;
for(i=0;i<l;i++)
{
index = i;
for(j=i+1;j<l;j++)
{
if(a[j]<a[index])index=j;//每次找最小的值,定位最小的坐标
}
//for j循环后 判定最小下标是否改变
if(index!=i)
{
swap(a,index,i);
}
}
}
/*插入排序数组实现 每次从无序区里面选择一个值,插入到有序区里面 有序区从1开始即开始是数组第一个元素*/
void insertSort(int a[],int l)
{
int i,j;
//i之前有序,i之后无序
for(i=1;i<l;i++)
{
for(j=i;j>0;j--)
if(a[j]<a[j-1])
{
swap(a,j,j-1);
}
}
}
/*冒泡排序数组实现 每次循环一趟,根据两相邻的数组值比较,最大的上浮,一趟结束后,数组的最后一个值即最大值,下次每次循环从数组最大下标-1开始*/
void bubbleSort(int a[],int l)
{
int i,n;
int flag = 0;//设置判定标示 提供冒泡效率
n=l-1;
//第一次要比较(冒泡)l-1次,依次类推
while(n)
{
flag = 0;//每次循环前复位
for(i=0;i<=n;i++)
{
if(a[i]>a[i+1])
{
swap(a,i,i+1);
flag=1;//有比较则标示
}
}
//判定每次循环是否有比较,无比较则退出循环
if(!flag)break;
n--;
}
}
/*快速排序之一趟排序 定中间位 比较难理解,最好看看图形示意*/
int partition(int a[],int s,int e)
{
int key=a[s];
while(s<e)
{
while(s<e&&key<=a[e])e--;
if(s<e)a[s++]=a[e];
while(s<e&&a[s]<=key)s++;
if(s<e)a[e--]=a[s];
}
a[s]=key;
return s;
}
/*快速排序的数组实现 采用分而治之的思想,每次拿数组的第一个元素作为中间元素,其左边的比该元素小,其右边的比该元素大,递归...最后有序*/
void quickSort(int a[],int s,int e)
{
if(s<e)//不是while 很要命
{
int i = partition(a,s,e);
//printf("i=%d\n",i);
quickSort(a,s,i-1);
quickSort(a,i+1,e);
}
}
/*归并排序之 二路归并排序*/
void main()
{
int a[8]={3,4,2,8,6,4,5,1},k;
printf("初始序列\n");
for(k=0;k<8;k++)printf("%d ",a[k]);
printf("\n\n");
printf("选择排序后结果\n");
quickSort(a,0,7);
for(k=0;k<8;k++)printf("%d ",a[k]);
// bubbleSort1(a,8);
// printf("插入排序后结果\n");
//printf("快速排序后结果\n");
//quickSort(a,0,7);
// for(k=0;k<8;k++)printf("%d ",a[k]);
}
分享到:
相关推荐
数据结构-各类排序算法总结.doc
根据提供的文件信息,我们可以深入探讨几种不同的排序算法在Java中的实现。这些算法包括插入排序(Insert Sort)、冒泡排序(Bubble Sort)、选择排序(Selection Sort)以及希尔排序(Shell Sort)。接下来,我们将...
总结各类排序方法。排序问题一直是计算机技术研究的重要问题,排序算法的好坏直接影响程序的执行速度和辅助存储空间的占有量。此代码将详细分析常见的各种排序算法,并从时间复杂度、空间复杂度、适用情况等多个方面...
报告的标题是“中科大算法导论课程实验 常见排序算法的实现与性能比较”,指出了本实验报告的重点在于实现并比较各类常见排序算法。 #### 描述解读 描述部分指明了实验的目的和范围,要求对六种排序算法——合并...
各类排序算法的总结 // 排序.cpp : 定义控制台应用程序的入口点。 // #include "stdio.h" #include "math.h" #include "tchar.h" #define MAX_OF_ARRAY 10 int iTemp = 0; int iTimes = 0; ////////...
总结各类排序算法的特点: - 对于小规模或基本有序的数据,插入排序和选择排序是不错的选择。 - 当数据量较大但关键字位数较少时,链式基数排序可能更合适。 - 对于大规模数据,快速排序、堆排序和归并排序是优选,...
【超全NOIP资料各种算法总结】 在编程竞赛领域,全国奥林匹克信息学竞赛(NOIP)是一项备受关注的赛事,旨在提升青少年的信息技术素养和编程能力。为了在NOIP中取得优异成绩,全面掌握各类算法至关重要。这份压缩包...
《kuangbin的ACM模板(新)》是针对ACM(国际大学生程序设计竞赛,International Collegiate Programming Contest)竞赛的一份详细算法总结。这份资料旨在帮助参赛者系统地理解和掌握ACM比赛所需的各类核心算法,...
本实验涵盖了几个重要的算法概念,包括整数划分、排序算法、最长递增子序列以及幻方矩阵。下面将逐一详细介绍这些知识点。 1. 整数划分: 整数划分是一个数学问题,它涉及将一个正整数n划分为若干个正整数的和,...
快速排序算法是一种高效的排序算法,它通过选择一个基准元素并分区操作,将一个序列分为两个部分,使得其中一部分的所有元素都比另一部分的元素小。 Hash表算法是一种通过哈希函数来快速定位数据的存储位置的算法,...
排序算法则是用来将一系列数据按照特定的顺序进行排列,常见的排序算法有冒泡排序、选择排序、插入排序等。搜索算法则是用来在一个数据集合中查找特定数据,例如线性搜索和二分搜索。 在算法设计和程序编写过程中,...
1. **排序算法**:包括但不限于冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。学习排序算法有助于理解数据如何在不同条件下的组织和操作。 2. **查找算法**:如线性查找、二分查找、哈希查找等。...
总结来说,《算法竞赛入门到进阶 课件+源码》是一套全面的学习资源,旨在帮助你从零基础开始,逐步成长为能在算法竞赛中脱颖而出的高手。通过深入学习课件中的理论知识,结合源码的实践练习,你将能够熟练掌握各类...
首先,我们可以推测这个压缩包中可能涵盖经典的排序算法,如冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序。这些排序算法各有优劣,适用于不同的数据场景,理解它们的工作原理有助于我们更好地选择和...
书中详细讲解了冒泡排序、选择排序、插入排序、快速排序、归并排序等经典排序算法,每种排序方法都有其适用场景和优劣,理解它们的原理和差异对于提高数据处理能力至关重要。线性搜索的简单易懂和二分搜索的高效性,...
总结来说,【李家油坊算法经典实现】是一份针对高级算法的深入学习资源,涵盖了数据结构、搜索算法、排序算法、图论算法和动态规划等多个重要领域,是提升算法技能的宝贵资料。无论是学术研究还是实际开发,掌握这些...
快速排序是一种高效的排序算法,采用分治法策略,它的时间复杂度平均为O(nlogn),最坏情况为O(n^2)。快速排序的基本步骤包括: 1. 选择一个基准元素(pivot),通常选择序列中的第一个元素或最后一个元素。 2. 重新...
按问题类型分类,算法可以划分为排序算法、查找算法、字符串处理算法、图问题算法、组合问题算法、几何问题算法和数值问题算法等。而按算法内在设计逻辑分类,主要包括蛮力法、分治法、减治法、变治法、时空权衡、...