选择排序法、冒泡排序法

选择排序法

int main(int argc, char *argv[])
{
	int i, j, iMin;
	int tmp;
	int nNums[10] = {2,123,541,32,12,74,92,50,8,21};

	for(i=0;i<10-1;i++)
	{
		iMin = i;    //提取数据的每个位置
		for(j=i+1;j<10;j++)  //每次循环,通过iMin获取最小值的下标。
		{
			if(nNums[iMin]>nNums[j])   //判断是否最小,比imin。后面的数就同imin这个数进行比较
				iMin = j;
		}
		if(iMin != i)   //当iMin不等i的时候,我们交换值。等于i我们就没有必要交换
		{
			tmp = nNums[i];
			nNums[i] = nNums[iMin];
			nNums[iMin] = tmp;
		}
	}

	return 0;
}

通过以下图来分析

这里外层循环中,每次循环都取得一个排序的位置。

然后内层循环比较判断出数组的最小数。在把最小数填充到外层的排序位置中

————————————————————————————————————

冒泡排序法

int main(int argc, char *argv[])
{
	int i, j;
	int tmp;
	int nNums[10] = {2,123,541,32,12,74,92,50,8,21};

	for(i=0;i<10-1;i++)  //控制循环次数
	{
		for(j=0;j<10-i-1;j++)//内层循环,相应的两两数进行比较
		{
			if(nNums[j]>nNums[j+1])//比较交换数据
			{
				tmp = nNums[i];
				nNums[i] = nNums[iMin];
				nNums[iMin] = tmp;
			}
		}
	}

	for(i=0;i<10;i++)
		printf("%d ",nNums[i]);
	system("pause");
	return 0;
}

原理如下图:

其中内层循环中,每次循环都把1个给比较到最后。那我们在内层循环的时候就可以少循环i次

所以内层循环 for(j=0;j<10-i-1;j++)  循环这么多次

时间: 2024-10-10 20:25:23

选择排序法、冒泡排序法的相关文章

关于Java中的选择排序法和冒泡排序法

一,这种方法是直接传入一个数组进行排序(选择排序法) public static void selectSort(int arr[]){ for (int i = 0; i < arr.length-1; i++) { for (int j = i+1; j < arr.length; j++) { if(arr[j]<arr[i]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } } 二,这种事传入一个数组和一个数组个数(选择排序

算法——蛮力法之选择排序和冒泡排序c++实现

这次实现的是蛮力法中的两个例子,选择排序法和冒泡排序法,使用的编译环境是vs2013,下面对这两个算法做一个简单介绍,然后是两个算法的c++实现代码. 选择排序法比较的范围是整个列表,每次扫描结束找出最小的一个元素一次放在前面的位置:而冒泡排序法每次是将相邻两个元素进行比较,将较大的元素放在后面,这样一次扫描结束后就将当前最大的那个元素放在了列表的后面. 两个排序方法的算法如下: 选择排序法 SelectionSort(A[0....n-1]) //输入:一个可排序数组A[0....n-1],

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序

C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 1 /*简单交换法排序 2 根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置 3 交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动 4 不稳定 5 */ 6 #include<windows.h> 7 #include<stdio.h> 8 void main(){ 9 int i,j,arr[10

选择排序与冒泡排序

这是两种非常相似的算法,都是两个嵌套循环.之前看网上很多人将选择排序当冒泡排序用,我怕以后混了,记录一下. 选择排序 /** * 选择排序 * @Title: getSelectSort * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param arr * @param @return 设定文件 * @return int[] 返回类型 * @throws */ public static int[] getSelectSort(int[] ar

图形化排序算法比较:快速排序、插入排序、选择排序、冒泡排序

图形化排序算法比较:快速排序.插入排序.选择排序.冒泡排序

算法效率的分析--【以选择排序与冒泡排序为基础】

在前面我们实现了选择排序与冒泡排序的具体实现,现在我们从数学的角度分析下算法的效率问题: 首先我们把两种排序算法的概念重温一遍: 选择排序:在每一轮中,找出最小的元素放在他最终的位置.挺起来有些别扭,我们举个实例: eg:        8, 5,1, 20, 6, 3 1ed······  1, 5,8, 20, 6, 3 2ed······  1, 3, 8,20, 6,5 3ed······  1, 3,5, 20, 6, 8 4ed······  1, 3,  5, 6,  20,8 5

java 选择排序与冒泡排序

选择排序与冒泡排序的特点与区别 ++++++++++++++++++++++++++++++++++++++++++++++ 选择排序 这一种简单的排序方法,它的基本思想是:R[n]第一次从R[0]~R[n-1]中选取最小值,与R[0]交换;第二次从R[1]~R[n-1]中选取最小值,与R[1]交换;...., 第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换;.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换;总共通过n-1次,得到一个按排序码

蛮力法-选择排序、冒泡排序

时间总让我有后知后觉的挫感,或许是因为我从不愿记录过往. 3.1.1 选择排序(n个元素,0~n-1,升序,不稳定) 对数组A做i次扫描(0<=i<=n-2),每次从最后n-i个元素中寻找最小元素,然后将它与Ai交换. 代码实现 /** * 选择排序(升序) * @param array 排序的数组 * */ public static void selectSort(int[] array){ for(int i=0;i<array.length-1;i++){ int min=i;

I学霸官方免费教程二十八:Java排序算法之选择排序和冒泡排序

选择排序 步骤一.选取一组数据中起始位置(下标)上的数据,和其后的各个位置(下标)上数据进行比较:如果起始位置(下标)上的数据大(升序)或小(降序),就将两个位置上的数据进行交换:这样完成一轮比较之后,起始位置上的数据就是最小或最大了步骤二.再次选取第二个位置上的数据,和其后各个位置上的数据进行比较.如此重复,就可将数据进行排序了. 实例: package algorithm.sort; /**  * 演示选择排序算法  * @author 学霸联盟 - 赵灿  */ public class 

选择排序与冒泡排序区别与比较

https://blog.csdn.net/weixin_38277423/article/details/70304120 区别主要在交换的方式上 每一轮都把最大或最小的元素筛选出来放在相应的位置上 这是相同的 但是 对于每一轮 比如第一轮 要把1~n 中最大的那个放到n这个位置 冒泡法每次比较和移动相邻的两项 而选择排序每次交换当前项和第n项 我把代码写出来你就懂了: 冒泡: for i:=1 to n-1 do if (a[i]>a[i+1]) then swap(i,i+1); 选择: