資料結構之排序演算法

2021-08-07 09:03:17 字數 1921 閱讀 9114

這是我在學習資料結構的時候,寫的一些簡單**,關於各種排序,查詢演算法,可以作為他人學習資料結構的時候參考用

,由於寫的比較匆忙,難免有問題,如有問題,歡迎指正!

#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...