思想:將陣列中的所有元素依次和前面的已經排好序的元素相比較(依次),如果選擇的元素比已排序的元素小,則交換,直到全部元素都比較過。
**實現:
sort.h:
#pragma once
#include
using
namespace
std;
#include
//直接插入排序
void insertsort (int* a,size_t n)
else
break;
}a[end+1] = tmp;}}
test.cpp :
#include "sort.h"
void print(int a,int len)
cout
; int len = sizeof(a)/sizeof(a[0]);
cout
<
print(a,len);
insertsort(a,len);
cout
<
print(a,len);
}int main ()
基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。
演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最大(小)的資料元素放到隊尾。
**實現:
void bubblesort(int* a,size_t n)
}if( 0 == exchange )//陣列本身為公升序,如果一趟排序結束,並沒有進行交換,那麼直接跳出迴圈(減少迴圈次數,公升高效率)
break;
--end;}}
1. 兩者的時間複雜度和空間複雜度還有穩定性相同
2 .插入排序相比較來說更優:
像這種特殊情況時,直接插入排序總共比較了n次;e而氣泡排序比較了(n-1)+(n-2)次。
插入排序 直接插入排序
直接插入排序演算法思想 將整個資料表分成左右兩個子表,其中左子表為有序表,右子表為無序表 整個排序過程就是將右子表中的元素逐個插入到左子表中,直到右子表為空,而左子表成為新的有序表。演算法過程分析 將待排序的元素存放在陣列r n 1 中,在初始狀態下,r 0 為監視哨,r 1 為有序區,r 2 r ...
插入排序 直接插入排序
一.插入排序的基本思想 將乙個記錄插入已排序好的有序表中,從而得到乙個新的記錄數加1的有序表。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。所謂的哨兵,就是即將插入的記錄。二.示例 如果碰見相等的元素,會被插到後面,所以,相等元素的前後順序沒有改變,插入排序是穩定的。三.演算法實現 public ...
插入排序 直接插入排序
直接插入排序的基本思想 將乙個記錄插入到已排序好的有序表中,然後得到乙個新記錄數增1的有序表。也就是 先將序列的第1個記錄看成是乙個有序的子串行,然後從第2個記錄逐個進行插入,直至整個序列有序為止。如果碰見乙個和插入元素相等的,那麼插入元素把想插入的元素放在相等元素的後面。所以,相等元素的前後順序沒...