排序复习

shawnc24 shawnc24     2023-03-09     145

关键词:

  直接插入排序:O(N2)

void InsertSort(int *a, int size)

	for (int i = 0; i < size - 1; i++)
	
		for (int j = i + 1; j > 0; j--)
		
			if (a[j] < a[j - 1])
			
				int tmp = a[j - 1];
				a[j - 1] = a[j];
				a[j] = tmp;
			
		
	

  冒泡排序:O(N2)

void BubbleSort(int *a, int size)

	for (int i = 0; i < size; i++)
	
		for (int j = 1; j < size-i; j++)
		
			if (a[j] < a[j - 1])
			
				int tmp = a[j - 1];
				a[j - 1] = a[j];
				a[j] = tmp;
			
		
	

  希尔排序 O(N2)  设置步长,优化后的插入排序

void ShellSort(int *a, int size)

	int gap = size / 2;
	while (gap >= 1)
	
		for (int i = 0; i < size; i ++)
		
			for (int j = i + gap;  j<size; j = j - gap)
			
				if (a[j] < a[j - gap])
				
					int tmp = a[j - gap];
					a[j - gap] = a[j];
					a[j] = tmp;
				
				break;
			
		
		gap = gap / 2;
	

  简单选择排序 O(N2) 

void SelectSort(int *a,int size)

	for (int i = 0; i < size; i++)
	
		for (int j = i + 1; j < size; j++)
		
			if (a[j] < a[i])
			
				int tmp = a[i];
				a[i] = a[j];
				a[j] = tmp;
			
		
	

  快速排序 logN

void QuickSort(int *a, int size)

	if (size <=1)
		return;
	//哨兵i 哨兵j
	int first_val = a[0];
	int i = 1, j = size - 1;
	while (i != j)
	
		//哨兵j开始行动
		while (j > i && a[j] >= first_val)
		
			j--;
		

		while (j > i && a[i] < first_val)
		
			i++;
		
		if(i<j)
		
			int tmp = a[i];
			a[i] = a[j];
			a[j] = tmp;
		
		

		/*for (int k = 0; k < size; k++)
		
			std::cout << a[k] << std::endl;
		
		std::cout << "
";*/
	
	if (a[0] > a[j])
	
		int tmp = a[0];
		a[0] = a[j];
		a[j] = tmp;
	
	

	for (int k = 0; k < size; k++)
	
		std::cout << a[k] << std::endl;
	
	std::cout << "
";
	QuickSort(a, i);
	//这里很重要
	if(i==1)
		QuickSort(a+i, size-i);
	else
		QuickSort(a + i + 1, size - i - 1);

  

排序(个人复习用)

            1、插入排序                    &n 查看详情

复习--拓扑排序

拓扑排序并不很常见,但也不容小觑,所以也要认真去做,不能马虎。来一发定义:拓扑排序算法,只适用于AOV网(有向无环图)。  把AOV网中的所有活动排成一个序列,使得每个活动的所有前驱活动都排在该活动的前面,这... 查看详情

复习排序算法

一.冒泡排序算法1.第一次排序时将序列[0~n-1]中从前往后进行两个相邻元素的比较,若前者较大则交换,比较n-1次;当第一趟排序结束时,序列最大的元素就被交换到位置n-1上,就如同一个气泡,一步一步往后翻滚,直到最后一位... 查看详情

插入排序[数据结构](复习)(代码片段)

  主要由三个插入排序的重要算法:直接插入排序、折半插入排序和希尔排序。  其基本思想在于每次讲一个待排序的记录,按其关键字大小插入到前面已经排好序的子序列中,直到全部记录插入完成。  直接插入排序&nb... 查看详情

数据结构复习之--“插入排序”-java实现

...中的菜鸟一枚,面临找工作,复习下数据结构,写的插入排序算法记录一下,每天写一点,不断积累吧!650)this.width=650;"src="https://img.baidu.com/hi/tsj/t_0040.gif"alt="t_0040.gif"/>importjava.util.Scanner;/** *  *@authorDL *数据结构复... 查看详情

算法复习之排序(代码片段)

...器类型 可以传入伪函数用于自定义类型比较STL中多种排序函数:详细解说STL排序二.自己实现排序:1.快速排序:基本思想:定义i,j类似两个哨兵,确定一个基准数分别从要排序数组头尾出发遍历从左到右找大于,从右到左找... 查看详情

插入排序算法,复习

#include<stdio.h>  void printk(int array[],int len){ int m; for(m=0;m<len;m++)    {         查看详情

排序算法复习:直接插入排序堆排序快排冒泡排序

冒泡排序,感觉是最简单的排序:基本思路:每次把数组中最小的一个元素像气泡一样浮动、固定到最顶端:  从前向后遍历数组,每次拿到一个元素,就执行一遍冒泡:    从数组末尾开始,到当前元素截止,从后向前... 查看详情

经典算法复习-插入排序算法

温习《数据结构C语言版》,看到排序算法,感觉看不懂。写到代码实现下,花费了很久才搞出来。实现的跟书本上的有点不一样哦,不喜勿喷。 参考文章:http://blog.csdn.net/hguisu/article/details/7776068#include<stdio.h>#include<std... 查看详情

快速排序复习(代码片段)

基本思想;类似于归并排序的分治思想,但是在快速排序中会将数组中的元素小的放一边,大的放一边;排序即完成;找切分点,假设数组的第一个元素作为切分点,然后和后面的元素进行比较,只要比当前这个切分点元素小的,就向前交换... 查看详情

六千字快速复习七种常用排序(代码片段)

文章目录一、插入排序1.原理2.代码实现二、希尔排序1.原理2.代码实现三、选择排序1.原理2.代码实现四、堆排序1.原理2.代码实现五、冒泡排序1.原理2.代码实现六、快速排序1.原理2.代码实现递归版本非递归版本七、归并排序1.原... 查看详情

2021-8-5复习排序算法(代码片段)

package_01_Sorted;importorg.junit.Test;importjava.util.*;/***排序算法:*①选择排序,不断的选择剩余元素中最小的,和外层循环相应的遍历位置交换。**②插入排序,当前索引左边都是有序的,当数组的索引达到数组最右... 查看详情

[复习]快速排序(代码片段)

原始数组L1,从中任意选择一个基准数F(一般选择第1个),小于F的数据放在F的左边记为数组minList,大于F的数据放在F的右边记为数组maxList。那么L1=minList+F+maxList然后对minList和maxList再做这样的操作,直到minList和maxList中的元素... 查看详情

复习---归并排序求逆序对--计蒜客2017noip模拟赛二--蒜头君的排序

...e.com/t/16443我不会矩阵快速幂,所以只拿了60分,发现归并排序掌握的并不熟练,借此良机复习一下。重在归并排序分治思想,要牢记!#include<iostream>#include<cstring>usingnamespacestd;intn,m,a[30005],s[30005],ans,d[30005];vo 查看详情

2021-10-21java:六千字快速复习七种常用排序(代码片段)

文章目录一、插入排序1.原理2.代码实现二、希尔排序1.原理2.代码实现三、选择排序1.原理2.代码实现四、堆排序1.原理2.代码实现五、冒泡排序1.原理2.代码实现六、快速排序1.原理2.代码实现递归版本非递归版本七、归并排序1.原... 查看详情

巩固复习(对以前的随笔总结)_排序(代码片段)

冒泡排序‘‘‘冒泡排序算法的运作如下:比较相邻的元素。如果第一个比第二个大(升序),就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。最后的元素会是最大的数。针对所有的元素重... 查看详情

数据结构复习题

...选择判断简答存储结构森林阿克曼(Ackerman)函数排序直接选择排序:冒泡排序:数据结构复习题填空在数据结构中, 从逻辑上能够把数据结构分为线性结构非线性结构数据结构在计算机内存中的表示是指数据的... 查看详情

2023数据结构考研复习-排序(代码片段)

2023数据结构考研复习-排序(八)十大排序算法Java版插入排序折半插入排序希尔排序冒泡排序快速排序选择排序堆排序归并排序综合应用题双向冒泡排序算法奇数移动到偶数前面快排枢纽值随机快排找第k小元素荷兰国旗... 查看详情