秒懂插入排序与选择排序

插入排序原理:它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序核心:假设第一个元素排好,之后的元素对排好的部分从后向前比较并逐一移动。

插入排序实现:

void insertion_sort(int a[], int n)
{
	int i,j,tmp;
	for (i = 1; i < n; i++) {
		tmp = a[i];
		for (j = i - 1; j >= 0 && a[j] > tmp; j--) {
			a[j+1] = a[j];
		}
		a[j+1] = tmp;
	}
}

插入排序过程动画:

选择排序:

选择排序和插入排序类似,都是in-place comparison sort。

选择排序核心思想:从未排好的部分的第一个作为最小(最大)的,然后依次和剩余的比较,如果有更小(更大)的,记下下标,以此作为新的最小(最大)值,继续比较,一趟结束后,然后和第一个进行交换。

选择排序实现:

void selection_sort(int a[], int n)
{
	int i, j, k;
	for (i = 0; i< n-1; i++) {
		k = i;
		for (j = i+1; j < n; j++) {
			if (a[k] > a[j])
				k = j;
		}
		if (k != i) {
			int tmp = a[i];
			a[i] = a[k];
			a[k] = tmp;
		}
	}
}

选择排序过程动画:

时间: 2024-11-02 14:07:05

秒懂插入排序与选择排序的相关文章

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

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

C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序

以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序,然后是測试的样例.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序

下面列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序,然后是测试的例子.代码位置:http://download.csdn.net/detail/luozuolincool/8040027 排序类: public class Sortings { //插入排序 public void insertSort(int[] array) { int temp = 0; int index = 0; for (int i = 0; i <

九种经典排序算法详解(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序,计数排序,桶排序,基数排序)

综述 最近复习了各种排序算法,记录了一下学习总结和心得,希望对大家能有所帮助.本文介绍了冒泡排序.插入排序.选择排序.快速排序.归并排序.堆排序.计数排序.桶排序.基数排序9种经典的排序算法.针对每种排序算法分析了算法的主要思路,每个算法都附上了伪代码和C++实现. 算法分类 原地排序(in-place):没有使用辅助数据结构来存储中间结果的排序**算法. 非原地排序(not-in-place / out-of-place):使用了辅助数据结构来存储中间结果的排序算法 稳定排序:数列值(key)

排序(上):冒泡排序、插入排序和选择排序

如何分析一个排序算法? 分析一个排序算法的三要素:排序算法的执行效率.排序算法的内存消耗以及排序算法的稳定性. 排序算法的执行效率 对于排序算法执行效率的分析,一般是从以下三个方面来衡量: 最好情况.最坏情况.平均情况时间复杂度 时间复杂度的系数.常数.低阶 比较次数和交换(或移动)次数 第1.2点在之前的复杂度分析中我们已经讲过了,第3点会在这一节以及接下来的章节中详细讲解. 这一节和下一节讲的都是基于比较的排序算法.基于比较的排序算法的执行过程,会涉及两种操作,一种是元素比较大小,另一种是元

java代码测试---插入排序和选择排序

1 public class QuickSort { 2 3 //插入排序 4 //插入前的序列是排序好的,将新插入的数值与之前的数值比较 5 //直到找到合适的位置 6 public static int[] quickSort(int[] arr){ 7 8 for(int j=1;j<arr.length;j++){ 9 int key = arr[j]; 10 int i = j-1; 11 12 while(i>=0 && arr[i]<key){ 13 arr

插入排序、选择排序的实现与性能比较

SortTestHelper.h 1 #ifndef INSERTIONSORT_SORTTESTHELPER_H 2 #define INSERTIONSORT_SORTTESTHELPER_H 3 #include <iostream> 4 #include <algorithm> 5 #include <string> 6 #include <ctime> 7 #include <cassert> 8 9 using namespace s

排序系列之——冒泡排序、插入排序、选择排序

排序之——冒泡排序: 基本思想:假设待排序表长为N,从后往前(或者从前往后)两两比较相邻元素的值,若为逆序(arr[i-1]>arr[i]),则交换他们,直到序列比较完.这时一趟冒泡. 代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <time.h> 5 #define N 20 6 7 void print_Arr(int *arr,

直接插入排序和选择排序

选择排序思想 在生活中,老师让5小孩子按个子从高到低排列,首选老师从5个学生中选出最高的,放到第一个位置,在从剩下4个学生中选出次高的,放到第二个位置,按照这样依次排好顺序,这就是选择排序. 第一趟从n个数中选出最大的数,放到第一个位置. 第二趟从n-1个数选出最大的数,放到第二个位置 第三趟从n-2个数中选出最大的数,放到第三个位置 依次类推,需要n-1趟排序. 代码: : 插入排序: 插入排序的算法思想就是在有序的元素中插入一个数,依然有序,直到要插入的数字全部插入万. 代码: