栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【常见的排序算法】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【常见的排序算法】

常见的排序算法

文章目录
  • 常见的排序算法
  • 一、冒泡排序
    • 1.1 算法思路
    • 1.2 算法实现
  • 二、选择排序
    • 2.1 算法思路
    • 2.2 算法实现
  • 三、插入排序
    • 3.1 算法思路
    • 3.2 算法实现
  • 四、整体实现
    • 4.1 运行结果

一、冒泡排序 1.1 算法思路

对于冒泡算法来说:比较相邻两个元素的大小,如果左边的元素大于右边的元素则进行交换,一直重复到最大的一个元素排到了最后。

1.2 算法实现
//1.冒泡排序 
//思路:相邻两个进行比较,如果左边大于右边则交换 一直到内循环完成则将最大值移到了最右边
void Bubble_Sort(int arr[],int n)
{
	int i = 0,j = 0,temp = 0;
	for(i = 0; i< n-1;i++)
	{
		for(j = 0;j
			if(arr[j] > arr[j+1])
			{
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}		
	}
}
二、选择排序 2.1 算法思路

对于选择算法来说:先假设一个最大值max让这个值去和数组中元素比较,如果max小于arr[i]则此时max=arr[i],并记录当前元素的下标,在将这个值与最后一个进行交换,此时最大值就已经排序到了最后一个。

2.2 算法实现
//2.选择排序
//1.返回最大值下标
int FindMaxPos(int arr[],int n)
{
	int pos = n;    //位置索引
	int max = arr[0];  //假设第一个为最大值
	int i = 0;
	for(i  = 0;i
		if(arr[i] > max)
		{
			max = arr[i]; //如果数组元素比假设的最大值要大,则该元素为新的最大值,pos为该值的下标索引
			pos = i;
		}
	}
	return pos; ///返回最大值下标
}

//2.进行整体排序
void Select_Sort(int arr[],int n)
{
	int i = 0;
	int pos = 0;
	int temp = 0;
	for(i = 1;i < n;i++)
	{
		pos = FindMaxPos(arr,i);
		temp = arr[pos];  //temp保存最大值
		arr[pos] = arr[n-1]; //将最大值存放到数组最后一个
		arr[n-1] = temp;
	}
}

三、插入排序 3.1 算法思路

对于插入算法来说:分为两部分,一部分是已经排序好的元素,另一部分是没有排序好的,我们将未排序好的元素key与他前面的元素arr[i-1],i = n为插入元素的下标索引,进行比较如果key小于前面一个元素,则将前一个元素向后移动,索引值减1,一直循环次过程。如果key是最小的一个或者此时i已经为0了,则跳出循环,arr[i] = Key

3.2 算法实现
//插入排序:已排序好和未排序好两部分
void Insert(int arr[],int n)
{
	int key = arr[n];  //要插入的元素
	int i = n; //插入元素下标
	while(arr[i-1] > key)
	{
		arr[i] = arr[i-1];
		i--;
		if(i == 0)  //如果只有一个元素则不用排序
		{
			break;
		}
	}
		arr[i] = key;
}
void Insert_Sort(int arr[],int n)
{
	int i =0;
	for(i = 1;i< n;i++)
	{
		Insert(arr,i);
	}
}

四、整体实现
#include  
#include 

//1.冒泡排序 
//思路:相邻两个进行比较,如果左边大于右边则交换 一直到内循环完成则将最大值移到了最右边
void Bubble_Sort(int arr[],int n)
{
	int i = 0,j = 0,temp = 0;
	for(i = 0; i< n-1;i++)
	{
		for(j = 0;j
			if(arr[j] > arr[j+1])
			{
				temp = arr[j];
				arr[j] = arr[j+1];
				arr[j+1] = temp;
			}
		}		
	}
}

//2.选择排序
//思路:先确定最大值,然后将其移动最后一个,在剩下的元素中在确定一个最大值移动到后面,重复上述
//1.返回最大值下标
int FindMaxPos(int arr[],int n)
{
	int pos = n;    //位置索引
	int max = arr[0];  //假设第一个为最大值
	int i = 0;
	for(i  = 0;i
		if(arr[i] > max)
		{
			max = arr[i]; //如果数组元素比假设的最大值要大,则该元素为新的最大值,pos为该值的下标索引
			pos = i;
		}
	}
	return pos; ///返回最大值下标
}

//2.进行整体排序
void Select_Sort(int arr[],int n)
{
	int i = 0;
	int pos = 0;
	int temp = 0;
	for(i = 1;i < n;i++)
	{
		pos = FindMaxPos(arr,i);
		temp = arr[pos];  //temp保存最大值
		arr[pos] = arr[n-1]; //将最大值存放到数组最后一个
		arr[n-1] = temp;
	}
}


//插入排序:已排序好和未排序好两部分
void Insert(int arr[],int n)
{
	int key = arr[n];  //要插入的元素
	int i = n; //插入元素下标
	while(arr[i-1] > key)
	{
		arr[i] = arr[i-1];
		i--;
		if(i == 0)  //如果只有一个元素则不用排序
		{
			break;
		}
	}
		arr[i] = key;
}
void Insert_Sort(int arr[],int n)
{
	int i =0;
	for(i = 1;i< n;i++)
	{
		Insert(arr,i);
	}
}

//数组元素输出
void PrintArr(int arr[],int len)
{
	int i = 0;
	for(i = 0;i< len;i++)
	{
		printf("%d ",arr[i]);
	}
	printf("n");
}
int main(void)
{
	int arr[] = {3,4,7,1,2,5,6,};
	int len = sizeof(arr)/sizeof(arr[0]);
	Bubble_Sort(arr,len);
	printf("------------冒泡排序-----------n");
	PrintArr(arr,len);
	Select_Sort(arr,len);
	printf("------------选择排序-----------n");
	PrintArr(arr,len);
	Insert_Sort(arr,len);
	printf("------------插入排序-----------n");
	PrintArr(arr,len);
	return 0;
}
4.1 运行结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/992805.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号