這是我在學習資料結構的時候,寫的一些簡單**,關於各種排序,查詢演算法,可以作為他人學習資料結構的時候參考用
,由於寫的比較匆忙,難免有問題,如有問題,歡迎指正!
#include #include //插入排序
/*對於每乙個元素位置i,先查詢他對於前面已排序的位置j,然後
再將j到i之間的陣列往後移位,將j位置插入原來i位置的元素,是穩定演算法
*/void insertsort(int a, int l)
a[j] = temp; }}
//交換排序
void swap(int& a, int &b)
void bubblesort(int a,int l)
a[l] = a[h];
while (l < h && a[l] <= t)
a[h] = a[l];
} a[l] = t;
return l;
}int partion3(int a, int l, int h)
while (l < h && a[l] <= t)
swap(a[l], a[h]);
} swap(t,a[l]);
}//一前一後法
int partion2(int a, int l, int h)
} swap(a[i+1],a[h]);
return i + 1;
}//n個整數中最小的k個數
void getminknum(int a, int n, int k)
int start = 0;
int end = n - 1;
int index = partion(a,0,n-1);
while (index !=k-1)
else
}}//選擇排序
void selectsort(int a, int l)
swap(a[t], a[i]);
}}//堆排序,利用大根堆,a從1開始儲存
void heapsort(int a, int l)
}//對排序,最小的k個數,用大根堆,不能使用小根堆,小根堆最後乙個元素不一定是最大值,大根堆的第乙個元素一定是最大值;
//b為a[1]-a[k];
void minknum(int a,int b,int l, int k)
else
}}//歸併排序,需要輔助空間b
int* b = new int[k];
void merge(int a,int start,int end,int mid)
int k = start;
int i = start;
int j = mid + 1;
for (; i <= mid&&j <= end;)
else
}if (list1 == null)
temp->next = list2;
else
temp->next = list1;
list = temp;
}//原地歸併排序,不需要輔助空間
//查詢
//順序查詢,查詢第二大的數
int find(int a, int l)
else if (a[i]>secmax)
}return secmax;
}//折半查詢,當且僅當有序下的陣列,不適合鍊錶
//有個難點,當陣列中沒有該元素,該怎麼表達出來
//l是陣列元素個數,不是末尾元素索引,這樣就可以訪問到a[l-1];
int find(int a,int l,int key)
else if (a[mid] < key)
else
return mid;
} return -1;
//作為沒有該元素的標記
}
資料結構之排序演算法
1.插入排序 直接插入排序 include void insertsort int unsort int length unsort j temp int main void insertsort num,7 int i 0 for i i 7 i return 0 折半插入排序 include v...
資料結構之排序演算法
學過好久的東西,感覺都忘記的差不多了,雖然可能日常寫 的過程之中也可能寫過一些演算法,但是從來都沒有規整,最近忙裡偷閒,寫點關於排序的演算法,當然好多人都寫過一些很不錯的演算法blog,我寫一下,只是方便自己日後檢視,當然也給有需要的朋友一些參考,歡迎指正 排序演算法有 氣泡排序,選擇排序,插入排序...
資料結構之排序演算法
1 直接插入排序 將乙個記錄插入到已經排好序的有序表中,只有當排序結束時每個元素才能進入到正確的位置,複雜度為o n2 優點 演算法簡單 易行,當待排序記錄數量較少時,該演算法非常有效 缺點 資料規模較大時,效率比較低。演算法insertsort r,n insertsort1.插入排序 for j...