不穩定演算法:
不能保證上述過程的演算法稱為不穩定演算法。
演算法的穩定性對於有些應用中比較重要。
排序是資料處理中經常執行的一種操作,時間開銷是衡量排序演算法的乙個重要標誌。通常,在排序過程中需要進行下列兩種操作:
空間效能是指排序過程中所需要的輔助儲存空間的大小。輔助儲存空間是除了存放待排序的資料所占用的儲存空間之外,執行演算法所需要的其他的儲存空間。
插入排序的基本思想:
從初始的子集合開始,不斷地把新的資料元素插入到有序子集合中的合適位置,使有序子集合中資料元素的個數不斷增加,直到有序子集合的大小等於帶排序的資料元素集合的大小為止。
撲克牌的抓牌過程就是乙個典型的插入排序。
順序地把待排序的資料元素按其關鍵字值的大小插入到已排序子集合的適當位置,子集合的資料元素的個數逐漸增加,直至有序子集合的大小等於待排序資料元素集合的大小為止。
直接插入排序思想
void insertsort(int a, int n)
a[j + 1] = tmp; //插入待插入元素}}
/*
a 待排序序列 n待排序元素個數
d 增量序列 num增量序列長度
/*對陣列進行一次劃分,arr[l]作為樞紐元素
l, r均為資料元素下標
*/int partition(int *arr, int l, int r)
while (i < j && arr[i] < key) i++; //從右往左找到乙個比樞紐大的
if (i < j)
}arr[i] = key;
return i;}/*
對陣列進行一次劃分,arr[l]作為樞紐元素
l, r均為資料元素下標
*/void quicksort(int *arr, int l, int r)
}void quicksort2(int *arr, int l, int r)
if (par + 1
< r)
while (!tmp.empty())
if (par + 1
< r)}}
}int main()
; int rt = partition(arr, 0, 8);
quicksort2(arr, 0, 8);
cout
<< "rt = "
<< rt << endl;
for (int i = 0; i < 9; ++i)
cout
<< arr[i] << " ";
cout
<< endl;
return
0;}
void quicksort(int a, const int low, const int high)
while(i a[i] < tmp) ++i;
if(i < j)
}a[i] = tmp;
if(low < i-1)
quicksort(a, low, i-1);
if(j + 1
< high)
quicksort(a, j+1, high);
}
各種排序演算法大集合
電腦程式就是資料結構加演算法。可見演算法在計算機世界的重要性,本文所述的演算法是指基礎通用的查詢和排序演算法,其是其他更複雜演算法的基礎,總結在此以備將來查閱。排序演算法又分為好多種 簡單排序 sorts 1.1 插入排序 insertion sort 1.2 選擇排序 selection sort...
演算法學習筆記 1 排序演算法
在本文中將列出幾種常用的排序演算法原始碼。選擇排序演算法 選擇排序 注意陣列第乙個數下標是0 不提供輸出 void selectsort int a,int n 該寫法表示按著從大到小排序,a如果需要進行結構體排序那麼 struct node nd 10 cmp node a,node b 意思是在...
演算法學習(一) 排序演算法
參考 排序 氣泡排序是一種很簡單也很常見的排序演算法,我們在初學程式語言,尤其是初學陣列的時候,應該都了解過氣泡排序,下面就當複習吧。public static void pubblesprt int array,int left,int right 氣泡排序 從陣列下標left開始,依次比較相鄰兩...