七大排序演算法---直接插入排序及折半優化
思路分析
將一個待排序元素,按其大小,插入到前面已經排好序的一組元素的合適位置上去,直到元素全部插完為止。
簡單來說:end指已經排好陣列的最後一個元素,end找到插入的位置(設定一個temp,temp為已經排序好陣列的下一個元素),用temp與end比較,如果temp
程式碼實現
void InsertSort(int array[], int size)
{
int end = 0;//已經排好的最後一個數
int temp = 0;//需要排序的數
for (int i = 0; i < size - 1; i++)
{
end = i;
temp = array [end + 1];//將要排序的數標記
while (end >= 0 && array[end]>temp)
{
array[end + 1] = array[end];
end--;
}
array[end + 1] = temp;
}
}
int main()
{
int n = 0;
int array[10] = { 5, 2, 4, 9, 3, 6, 8, 7, 1, 0 };
InsertSort(array, 10);
for (; n < 10; n++)
{
printf("%d", array[n]);
}
return 0;
}
優化:二分查詢直接排序
當陣列長度過大的時候,找到要插入的位置會消耗大量資源,使用二分查詢可以更快的找到插入位置。
/直接插入排序二分法
void InsertSort(int array[], int size)
{
int end;//已經排好的最後一個數
int temp;//需要排序的數
int left;//二分法左邊界
int right;//二分法右邊界
for (int i = 0; i < size - 1 ; i++)
{
end = i;
temp = array[i + 1];
left = 0;
right = end;
while (left <= right)
{
int mid = left + ((right - left)>>1);//防止越界
if (array[mid]>temp)
{
right = mid - 1;
}
else
{
left = mid + 1;//等於mid的情況同樣插到後面
}
}
while (end >= 0 && end >= left)
{
array[end + 1] = array[end];
end--;
}
array[end + 1] = temp;
}
}
int main()
{
int n = 0;
int array[10] = { 5, 2, 4, 9, 3, 6, 8, 7, 1, 0 };
InsertSort(array, 10);
for (; n < 10; n++)
{
printf("%d", array[n]);
}
return 0;
}
相關推薦
七大排序演算法---直接插入排序及折半優化
思路分析 將一個待排序元素,按其大小,插入到前面已經排好序的一組元素的合適位置上去,直到元素全部插完為止。 簡單來說:end指已經排好陣列的最後一個元素,end找到插入的位置(設定一個temp,
小甲魚 排序演算法 直接插入排序
小甲魚 排序演算法 直接插入排序 在這之間排序演算法的時間複雜度是O(n2),希爾排序突破了O(n*logn) 直接插入排序演算法(Straight Insertion Sort)的基本操作是將一個記錄插入到已經排好序的有序表中,從而得到一個新的、記錄數增
排序演算法 -- 直接插入排序
排序演算法的基本概念 排序的定義 排序的穩定性 內排序與外排序 內排序是整個排序過程中,待排序的所有記錄全部放置在記憶體中。 外排序是由於排序的記錄個數太多,不能同時放置在記憶體,整個排序過程需要內外存之間多次資料交換才能進行。 直接插入排序
C語言排序演算法--直接插入排序
直接插入排序法是指將一個記錄插入到已排好序的有序序列中,使整個序列在新插入了一個記錄之後仍然有序,插入位置的確定是通過將待插入的記錄與有序區中的各記錄自右向左依次比較其關鍵字值的大小確定的。 #include <stdio.h> void isort(int
經典排序演算法,氣泡排序,選擇排序,直接插入排序,希爾排序,快速排序,歸併排序,二分查詢。原理及python實現。
1.氣泡排序 氣泡排序 1.比較相鄰的元素,如果第一個比第二個大(升序),就交換他們兩個 2.對每一對相鄰的元素做同樣的工作,從開始到結尾的最後一對 這步做完後,最後的元素會是最大的數 3.針對所有的元素重複以上的步驟,除了最
排序演算法02——插入排序(直接、折半)、快速排序
插入排序:插入排序的思路就是,前面的陣列已經有序(從第二個數看來,第一個數已經有序了,它只要找到自己的插入點插入就行了;然後第三個數看前兩個數都已經有序了....以此類推),下標為i的這個值依次與前面的值比較,找到合適的地方就可以直接插入了。但是,陣列的插入是需要插入位以後的
排序演算法--插入排序之直接插入排序
直接插入排序的核心思想是把一個記錄插入一個有序序列中,每插入一個記錄就得到一個新的有序序列,直到所有記錄都插入成功,得到有序序列。 每次插入記錄時的有序序列如何得到,關鍵在第一次,第一次要插入的記錄時序列的第二個值,有序序列只有一個值,就是第一個記錄。 程式碼: #in
排序演算法之插入排序(直接插入、希爾排序)
前言 一個好的排序演算法對於程式的優化會有很大的提升,雖然在許多語言的類庫中就存在了N種排序方法,但是隻有在瞭解了每一種排序演算法後才能更好的在實際中運用這些演算法。這裡我主要說明插入排序中的直接插入以及希爾排序的實現。 直接插入 直接插入排序是最簡單的排序演算法之一。對於直
九大排序演算法之插入排序(原理及實現)
1、演算法思路:每趟將一個待排序的元素作為關鍵字,按照其關鍵字值得大小插入到已經排好的部分的適當位置上,知道插入完成。 2、演算法過程 舉個栗子(第一趟的排序過程) 原始序列:49、38、65、97、76、13、27、49 1)開始以第一個元素49為關鍵字,看成一個序列,其餘數看成另
演算法 直接插入排序小述
一、概述 本節主要簡單介紹一下直接插入排序演算法,直接插入排序(Straight Insertion Sort)是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到一個新的、記錄數量增1的有序表。摘自百度百科。 二、分析 假如現在有一個具有n+1個元
排序演算法:選擇排序,直接插入排序,氣泡排序
package com.Algorithm.Search_Sort; import java.util.Arrays; public class Sort { public int array[] = {99,34,76,92,34,17,77,41,40,36,6}; //
資料結構與演算法-直接插入排序
概要 基本概念 java程式碼實現 圖示執行過程 時間複雜度分析 基本概念 直接插入排序(Straight Insertion Sort)的基本操作是將一個記錄插入到
插入排序(直接插入排序&折半插入排序&希爾排序)
目錄 1,插入排序 概念:插入排序的基本方法:每一步將一個待排序元素按照其排序碼的大小,插入到前面已經排好序的一組元素的適當位置,直到元素全部插入為止。 1.1,直接插入排序 演算法思想:直接插入排序是原地排序,把陣列中的a[n]中的n個元素看
Java演算法——直接插入排序
直接插入排序 前言 直接插入是一種穩定的插入排序,效率較高,而且時間複雜度也低,因為只是在一個數組內部進行內排,但是隻適用於在有一些以前就排好的順序的陣列內部,如果在很長又很雜亂的陣列內部進行排序的話,會讓效率降低。 直接插入排序描述 首先定義一段長度為n的陣列,從最左邊開始
排序演算法(一)氣泡排序,簡單選擇排序,直接插入排序,希爾排序
氣泡排序,簡單選擇排序,直接插入排序是三種複雜度為O(n2)的演算法,希爾排序在特殊增量序列的時候可以獲得複雜度為O(n3/2) 氣泡排序 1、最簡單的排序實現 這裡把每個數和這個數之後的每個數比較,大於就交換位置。 缺點:多出了很多次沒有用的交
常用內部排序演算法之四:簡單選擇排序、直接插入排序和氣泡排序
前言 之所以把這三類演算法放在一塊,是因為除此之外的演算法都是在這三類演算法的基礎上進行優化的。簡單選擇排序的思想是每一趟n−i+1(i=1,2,...,n−1)個記錄中選擇最小的記錄作為有序序列的第i個記錄。直接插入排序的思想是將一個記錄插入到已經排好序的有
資料結構與演算法——直接插入排序
好久沒寫部落格了,今天就簡單總結下直接插入排序。 什麼是直接插入排序? 直接插入排序就是將某一個元素與順序表中元素進行比較,然後插入到相應的位置,使整個順序表處於有序狀態。有關數據結構的書上都會用撲克牌進行比喻說明,就跟玩撲克一樣,當我們拿到幾張牌時,要想整理成一個順子,我
【演算法】 簡單選擇排序與直接插入排序
簡單選擇排序與直接插入排序算是排序演算法裡最簡單的兩個演算法了,做個對比就更容易理解了。 簡單選擇排序 簡單選擇排序就是在要排序的陣列中,選出最小或者最大的一個數與第
通俗理解插入排序(直接插入排序,折半插入排序,希爾排序)
直接插入排序 直接插入排序就是將待排序的值,逐一按元素的大小插入前面的有序序列 例如對-23,45,2,-45,9,5,3,65,-24進行直接插入排序,我們可以看成將45,2,-45,9,5,3,65,-24逐步插入-23的序列 package
簡單排序演算法之簡單選擇排序和直接插入排序
簡單選擇排序簡述: 簡單選擇排序(Simple Selection Sort)可以說是氣泡排序的一種改版,它不再兩兩比較出較小數就進行交換,而是每次遍歷比較當前數的後面所有數,最後再把最小的數和當前數