1. 程式人生 > >秒懂插入排序與選擇排序

秒懂插入排序與選擇排序

插入排序原理:它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。

插入排序核心:假設第一個元素排好,之後的元素對排好的部分從後向前比較並逐一移動。

插入排序實現:

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;
		}
	}
}

選擇排序過程動畫:


相關推薦

插入排序選擇排序

插入排序原理:它的工作原理是通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。 插入排序核心:假設第一個元素排好,之後的元素對排好的部分從後向前比較並逐一移動。 插入排序實現: void insertion_sort(int a[], int

冒泡排序選擇排序(經典版)----java基礎總結

!= 關於 ++ 再看 pri int ava 不為 分享 前言:關於冒泡排序和選擇排序,每次寫的時候都要再看看他們的概念,這次,就自己寫明白 1.冒泡排序: 其實冒泡排序應該用例子證明,設數組長度為N。 1.比較相鄰的前後二個數據,如果前面數據大於後面的數據,就將二個數據

氣泡排序選擇排序的實現分析

氣泡排序與選擇排序是兩種非常基礎的排序方式,也是許多程式設計師入門的排序演算法。很多資料結構或者演算法教材清晰明瞭地描述了兩種排序的工作原理,複雜度等,但紙上得來終覺淺,為了摸清楚兩種演算法的效能,我還是親自動手操作了一波~~~ 下面請跟上我的思路~~~ 氣泡排序作為最最基礎的排序方法,應該

利用指標排序選擇排序演算法

  1 //讀入字串,並排序字串 2 #include <stdio.h> 3 #include <string.h> 4 #define SIZE 81 5 #define LIM 20 6 #define HALT "" 7 8 void sts

linux C開發day3: 氣泡排序選擇排序

今天在學了陣列的基礎上,認識理解兩種排序方法:氣泡排序法和選擇排序法。 心得:個人覺得選擇排序法在思維邏輯上比氣泡排序法要難些,對於這些排序要在理解的基礎上加強記憶,不需要自己去寫,只需將這些前人創作的程式碼記憶熟練即可。本文對選擇排序解釋不是很清楚,希望大神們指點! 一、氣泡排序法 氣

Python--重溫氣泡排序選擇排序

今天又看了一下資料結構,就想著寫一下比較常見的排序, 冒泡的挨著的比較 li=[1,6,8,3,4,7,9] def maopao(): for i in range(len(li)-1): for j in range(i,len(li)-1): if li[j]>li[j+1]:

Java學習之路——氣泡排序選擇排序

Java學習之路——for迴圈實現氣泡排序 基本步驟為: 利用for迴圈輸入並輸出陣列各個元素的值 利用冒泡法(選擇法)進行排序 利用for迴圈將排序完成的陣列元素進行輸出   冒泡法方法:氣泡排序採取從頭至尾以此比較相鄰的兩個元素;小數放前,大數放後。第一輪

java中氣泡排序選擇排序的區別

初學java語言,排序演算法絕對是我們拿來實踐的好例子。而在排序中有兩種簡單的演算法是繞不開的,就是氣泡排序與選擇排序。下面來分別講解: 冒泡演算法:假設陣列長度為lenght,冒泡演算法的外迴圈為l

氣泡排序選擇排序區別

氣泡排序:氣泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數 放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。

用java程式碼實現氣泡排序選擇排序

import java.util.Arrays; public class Sort { public static void main(String[] args) { int[] arr={12,45,89,2,10,9}; maopaoSort(arr); selectSort(arr);

【內部排序】 交換排序選擇排序詳解

交換排序:通過依次交換逆序的元素使其有序化的過程。 介紹兩種交換排序: 氣泡排序,快速排序 冒泡法:從第一個元素開始,依次比較相鄰的兩個元素,如果逆序則交換,第一趟比較結束後,序列中最大的元素將移動到序列末尾,即第n個位置,第二趟將次大元素移動到n-1位置…… 多趟比

Java之氣泡排序選擇排序的區別理解

Java之選擇排序與氣泡排序的區別與理解 選擇排序        選擇排序:就是每次從一組待排序的陣列中找到最小值(或最大值)然後與該序列的起始位置進行替換,以此類推,直到待排序的陣列排序好為止。 選擇排序程式碼: public class SelectionSort

【演算法】氣泡排序選擇排序的遞迴實現

1 氣泡排序 1 氣泡排序: void bubbleSort(int *data,int start,int end) { if (start < end) { int temp = 0; int length = end -

Java排序算法分析實現:快排、冒泡排序選擇排序插入排序、歸並排序(二)

第一個元素 spa insert 循環 冒泡排序 author 高級算法 ins -s 一、概述:   上篇博客介紹了常見簡單算法:冒泡排序、選擇排序和插入排序。本文介紹高級排序算法:快速排序和歸並排序。在開始介紹算法之前,首先介紹高級算法所需要的基礎知識:劃分、遞歸,並順

演算法資料結構(十三) 氣泡排序插入排序、希爾排序選擇排序(Swift3.0版)

本篇部落格中的程式碼實現依然採用Swift3.0來實現。在前幾篇部落格連續的介紹了關於查詢的相關內容, 大約包括線性資料結構的順序查詢、折半查詢、插值查詢、Fibonacci查詢,還包括數結構的二叉排序樹以及平衡二叉樹的構建與查詢,然後還聊了雜湊表的構建與查詢。接下來的幾篇部落格中我們就集中的聊一下常見的集中

Java排序演算法分析實現:快排、氣泡排序選擇排序插入排序、歸併排序(一)

轉載  https://www.cnblogs.com/bjh1117/p/8335628.html   一、概述:   本文給出常見的幾種排序演算法的原理以及java實現,包括常見的簡單排序和高階排序演算法,以及其他常用的演算法知識。   簡單排序:氣泡排序、選擇排序、

JavaScript 資料結構演算法之美 - 氣泡排序插入排序選擇排序

1. 前言 演算法為王。 想學好前端,先練好內功,只有內功深厚者,前端之路才會走得更遠。 筆者寫的 JavaScript 資料結構與演算法之美 系列用的語言是 JavaScript ,旨在入門資料結構與演算法和方便以後複習。 之所以把氣泡排序、選擇排序、插入排序放在一起比較,是因為它們的平均時間複

java面試準備之基礎排序——冒泡選擇排序

-1 [] pub pop 基礎排序 ava for length system 選擇排序: public void select(int[] arr){ for(int i=0;i<arr.length;i++){ for(int j=i+1;j&

(九)數據結構之簡單排序算法實現:冒泡排序插入排序選擇排序

html lan 獎章 tmx 4tb wot 數據結構 lec get d59FG8075P7伊http://www.zcool.com.cn/collection/ZMTg2NTU2NjQ=.html 312V畏蝗淤ZP哦睬http://www.zcool.com.c

Java數據結構和算法總結-冒泡排序選擇排序插入排序算法分析

odi .com 依次 一個數 演示 clas 邏輯 true odin   前言:排序在算法中的地位自然不必多說,在許多工作中都用到了排序,就像學生成績統計名次、商城商品銷量排名、新聞的搜索熱度排名等等。也正因為排序的應用範圍如此之廣,引起了許多人深入研究它的興趣,直至今