/*-------冒泡排序----------
函数名: bubble_sort
功能 : 实现升序排序
参数 : 带排序的数组,数组的长度
返回值 :为空
描述:时间复杂度为O(n^2),辅助空间为O(1);
有一种变形的冒泡排序-- 鸡尾酒排序,
它是双向的冒泡排序,时间复杂度也为O(n^2).
-------------------------*/
void bubble_sort(int *bubble, int Length)
{
int i,j;
int temp;
int count;
count = Length;
for(i = 0; i < Length; i++)
{
count--; //每一次产生最大数后,下面要遍历的数组长度减1;
for(j = 0; j < count; j++)
{
if(bubble[j] < bubble[j+1])
{
temp = bubble[j];
bubble[j] = bubble[j+1];
bubble[j+1] = temp;
}
}
}
}
/*--------插入排序-----------
函数名: insert_sort
功能 : 实现升序排序
参数 : 带排序的数组,数组的长度
返回值 :为空
描述:时间复杂度为O(n^2),辅助空间为O(1);
-------------------------*/
void insert_sort(int *insertion, int Length)
{
int i,j;
int temp;
for(i = 0; i < Length; i++)
{
for(j = i; j >= 1; j--)
{
if(insertion[j] > insertion[j-1])
{
temp = insertion[j];
insertion[j] = insertion[j-1];
insertion[j-1] = temp;
}
}
}
}
/*--------选择排序-----------
函数名: select_sort
功能 : 实现升序排序
参数 : 带排序的数组,数组的长度
返回值 :为空
描述:时间复杂度为O(n^2),辅助空间为O(1);
-------------------------*/
void select_sort(int *selection, int Length)
{
int i, j;
int flag=0,temp;//flag标志最小的位置
int Min;
for(i = 0; i < Length; i++)
{
Min = selection[i];
for(j = i; j < Length; j++)
{
if(Min > selection[j])
{
flag = j;
Min = selection[j];
}
}
temp = selection[i];
selection[i] = Min;
selection[flag] = temp;
}
}
关于冒泡排序的,后来看到如果在进行length遍之前就已经排序好的话,也就会做白白的循环,所以下面改了程序设置了一个标志,但没有发生交换的时候,证明已经排完序了。
void bubble_sort(int *bubble, int Length)
{
int i,j;
int temp;
int count, flag = 0;
count = Length;
for(i = 0; i < Length; i++)
{
count--; //每一次产生最大数后,下面要遍历的数组长度减1;
for(j = 0; j < count; j++)
{
if(bubble[j] > bubble[j+1])
{
flag = 1;
temp = bubble[j];
bubble[j] = bubble[j+1];
bubble[j+1] = temp;
}
}
if(flag == 0)
{
break;
}
else
{
flag=0;
}
}
}
分享到:
相关推荐
- 选择排序是一种简单直观的排序算法,它的基本思想是在未排序序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,然后放到已排序序列的末尾。...
- 插入排序是一种简单直观的排序算法,它的工作原理类似于我们日常整理扑克牌的过程。初始时,数组可以看作是未排序序列,已排序序列为空。每次从未排序序列中取出一个元素,找到它在已排序序列中的合适位置并将其...
| 简单选择排序 | O(n^2) | O(n^2) | O(n^2) | O(1) | 稳定 | | 直接插入排序 | O(n^2) | O(n) | O(n^2) | O(1) | 稳定 | | 希尔排序 | O(nlogn)~O(n^2) | O(n^1.3) | O(n^2) | O(1) | 不稳定 | | 堆排序 | O(nlogn)...
function InsertSort(arr) { //插入排序->直接插入法排序 var st = new Date(); var temp, j; for(var i=1; i; i++) { if((arr[i]) (arr[i-1])) { temp = arr[i]; j = i-1; do { arr[j+1] = arr[j]; j--; ...
在JavaScript(JS)中,图片排序是一个常见的需求,特别是在网页动态展示或图像处理的应用中。...理解这些基本概念和技巧,将有助于你更好地实现自己的图片排序功能,无论是在简单的网页应用还是复杂的图像处理项目中。
冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复进行的,直到没有再需要交换,也就是说该数列已经排序完成。 #### 实现...
- 一个简单的桶排序Python实现可能包括以下步骤: 1. 定义桶的数量和区间的范围。 2. 创建空桶数组。 3. 将元素放入对应桶中。 4. 对每个非空桶进行排序。 5. 从桶中按顺序取出元素,构建有序序列。 6. **...
在本章“第七章:外部排序-20211”中,主要讲解了如何在磁盘文件或磁带文件等外部存储介质上进行排序。外部排序的主要挑战在于频繁的磁盘I/O操作,因为相比内存,磁盘的存取速度慢得多。 1. **外部排序的基本概念**...
插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序...
选择排序是一种简单直观的比较排序算法,它的工作原理是遍历待排序的数据元素,依次找到最小(或最大)的元素,放到序列的起始位置,直到全部待排序的数据元素排完。 #### 二、程序代码分析 ##### 2.1 主函数 `...
在这个"冒泡排序-14-表单提交.ev4.rar"压缩包中,很可能包含了一个关于冒泡排序的示例讲解,可能是一个教学视频"冒泡排序-14-表单提交.ev4.mp4"。 冒泡排序的基本思想是通过重复遍历待排序的数列,一次比较两个元素...
**选择排序**是一种简单直观的排序算法,它的基本思想是通过n次比较找到未排序序列中的最小(或最大)元素,然后将其放到已排序序列的末尾。这个过程重复n-1次,直到所有元素均排序完毕。选择排序的时间复杂度是O(n...
提供的压缩包文件“算法-理论基础- 排序- 直接选择排序(包含源程序).pdf”可能包含更详细的解释、示例代码以及可能的性能分析。通过阅读这份文档,你可以深入理解直接选择排序的工作机制,学习如何编写对应的源...
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
八大排序java实现版本,直接插入排序、折半插入排序、冒泡排序、简单选择排序、希尔插入排序、快速排序 、堆排序、2-路归并排序 、基数排序,并有时间比较,博文...
sorttable.js 排序-方便实用的js排序,只需简单操作即可见到效果 var stIsIE = /*@cc_on!@*/false; sorttable = { init: function() { // quit if this function has already been called if (arguments...
- 插入排序有多种实现方式,包括简单插入排序、二分插入排序等。简单插入排序在最坏情况下(逆序输入)的时间复杂度为O(n^2),而二分插入排序通过改进可以在插入新元素时使用二分查找,降低平均时间复杂度至O(n log...
直接插入排序是一种简单直观的排序算法,它是通过构建有序序列,对于未排序数据,在已排序...通过阅读"算法-理论基础- 排序- 直接插入排序(包含源程序).pdf"文件,你可以深入了解其细节并实践代码,提升编程能力。
《数据结构-选择排序-C.ppt》文档详细介绍了选择排序这一内部排序方法,包括它的基本思想、算法描述以及算法分析。选择排序的核心在于通过一系列的比较找到数组中最小(或最大)的元素,并将其放到正确的位置,从而...
冒泡排序是一种简单的排序方法,通过不断地交换相邻的错误顺序元素来实现排序。它的时间复杂度为O(n²),适用于小规模数据或部分有序的数据。 插入排序的工作原理是将数据分为已排序和未排序两部分,每次将未排序...