進入找工作倒計時狀態了,計畫好好複習一下資料結構和相關演算法,估計用兩天時間把見過的排序演算法整理下,首先看一下時間複雜度為o(n2)的演算法。
首先參考大話資料結構定義乙個鍊錶類:
#include #define maxsize 1000
using namespace std;
class sqlist
sqlist(int length1,int value=0):length(length1)
data[length]=value;
length++; }
friend ostream& operator<<(ostream& output, sqlist list);
public:
int data[maxsize];
int length;
};void swap(int& a,int &b)
ostream& operator<<(ostream& output, sqlist list)
length--; }}
void bubblesort2(sqlist* list) }
}
選擇排序法:
/**
*選取排序即每次在未排序佇列其中選取乙個最小值。然後與第i個值進行交換,直至i為length為止;
*當然。也能夠選取最大值把到後面,依據需求而定
*/void selectsort(sqlist* list)
} if (pos != i)
}}
簡單插入排序法:
/**
*遍歷鍊錶,把每乙個元素插入到正確位置
*/void insertsort1(sqlist *list)
int tmp = list->data[i];
for (int k = i; k > j+1; --k)
list->data[j + 1] = tmp; }}
void insertsort2(sqlist *list)
list->data[j + 1] = tmp;
} }}
希爾排序法(簡單插入排序的改進):
/**
*希爾排序是插入排序的一種改進,可以理解為把乙個陣列分成幾個小的陣列進行插入排序,再合併使原陣列基本有序。
*希爾排序乙個非常關鍵的步驟是增量的選取。合適的增量可以提高排序效率,但不合適的增量可能會導致程式崩潰或結果錯誤。
*其次。希爾排序也不是乙個穩定的排序演算法。由於它是跳躍插入排序的。
*希爾排序僅僅是比前面幾種o(n2)的效果稍好,並不會優於後面要提到的高速排序等演算法。
*/ void shellsort(sqlist* list) list->data[j + increment] = tmp; } } } while (increment > 1); }
演算法 之 簡單排序
這裡介紹三種常用的排序演算法 氣泡排序 選擇排序 插入排序。1.氣泡排序 氣泡排序是一種簡單的排序,它通過元素的兩兩比較,不斷的將大的或小的元素向左或向右移動,通過這種方式來實現排序。如下面是實現由小到大的排序 外層迴圈out一開始為nelems 1,這代表元素的最大位置。內層迴圈從位置0和位置1的...
演算法之簡單排序
示例 氣泡排序 複雜度 比較次數 n n 1 2 o n的平方 移動次數 平均移動 n的平方 4 所以複雜度也為n n 1 2 o n的平方 public void bubblesort inttemp for int i 0 i for int i 0 i 列印 for int i 0 i 選擇排...
JS 排序演算法之簡單排序
目錄 function bubblesort ary 如果沒有發生交換 表明排序完成 直接退出排序 if exchange break return ary 效果示例 function straightinsertionsort ary while j 0 temp ary j 找到temp需要插入...