排序演算法和鍊錶

2021-08-20 16:18:40 字數 2397 閱讀 5042

void swap(int a, int b)  

// 2.加法

void swap(int a, int b)  

// 3.異或(相同為0,不同為1. 可以理解為不進製加法)

void swap(int a, int b)   

​2、求最大公約數。

/** 1.直接遍曆法*/

int maxcommondivisor(int a, int b)

}    

return max; } 

/** 2.輾轉相除法*/

int maxcommondivisor(int a, int b)    

return b; } 

// 擴充套件:最小公倍數= (a * b)/最大公約數  

3、模擬棧操作

/**  棧是一種資料結構,特點:先進後出 

*/  練習:使用全域性變數模擬棧的操作 

#include

#include

#include

static int data[1024]; //棧最多能儲存1024個資料 

static int count = 0;//目前已經放了多少個數(相當於棧頂位置)  

//資料入棧

push void push(int x)

//資料出棧 

pop int pop()  

//檢視棧頂元素 

top int top() 

//查詢棧滿 

full bool full()       

return 0;   }

//查詢棧空 

empty bool empty()    

return 0; } 

int main()        

//出棧    

while(!empty())   

printf("\n");         

return 0; } 

4、排序演算法

1.選擇排序:將已排序部分定義在左端,然後選擇未排序部分的最小元素和未排序部分的第乙個元素交換。

/**   

*      【選擇排序】:最值出現在起始端   

*      第1趟:在n個數中找到最小(大)數與第乙個數交換位置 

*      第2趟:在剩下n-1個數中找到最小(大)數與第二個數交換位置 

*      重複這樣的操作...依次與第三個、第四個...數交換位置  

*      第n-1趟,最終可實現資料的公升序(降序)排列。  

*/ 

void selectsort(int *arr, int length) 

}    }

}  2.氣泡排序:將已排序部分定義在右端,在遍歷未排序部分的過程執行交換,將最大元素交換到最右端。

/**   

*【氣泡排序】:相鄰元素兩兩比較,比較完一趟,最值出現在末尾  

*第1趟:依次比較相鄰的兩個數,不斷交換(小數放前,大數放後)逐個推進,最值最後出現在第n個元素位置 

*第2趟:依次比較相鄰的兩個數,不斷交換(小數放前,大數放後)逐個推進,最值最後出現在第n-1個元素位置 

*……   ……  

*第n-1趟:依次比較相鄰的兩個數,不斷交換(小數放前,大數放後)逐個推進,最值最後出現在第2個元素位置   */

void bubllesort(int *arr, int length)         

}      }

}  3.插入排序:將已排序部分定義在左端,將未排序部分元的第乙個元素插入到已排序部分合適的位置。

4、折半查詢(二分查詢)

/**  

*折半查詢:優化查詢時間(不用遍歷全部資料)   

*折半查詢的原理:  

*   1> 陣列必須是有序的  

*   2> 必須已知min和max(知道範圍)  

*   3> 動態計算mid的值,取出mid對應的值進行比較  

*   4> 如果mid對應的值大於要查詢的值,那麼max要變小為mid-1  

*   5> 如果mid對應的值小於要查詢的值,那麼min要變大為mid+1  * 

*/ 

// 已知乙個有序陣列, 和乙個key, 要求從陣列中找到key對應的索引位置  

int findkey(int *arr, int length, int key)

else if (key < arr[mid])  

else    

}   

return -1;    } 

鍊錶排序演算法

1 題目 對亂序的鍊錶進行排序,要求空間複雜度為常數。leetcode 148 中等 輸入 4 2 1 3 輸出 1 2 3 4 輸入 1 5 3 4 0 輸出 1 0 3 4 5 2 思路 對於這題我有兩種解法,一種是時間複雜度o n2 對於暴力解法,我們會將整個鍊錶分為 有序段 和 無序段 兩段...

演算法 鍊錶排序

sort a linked list in o n log n time using constant space complexity.example 1 example 2 歸併排序 首先將鍊錶從中部切分為兩個部分,不斷遞迴這個過程 遞迴回溯的時候將兩個鍊錶歸併為有序鍊錶 public list...

排序演算法 鍊錶實現

陣列的高效體現於隨機訪問,插排 快排等排序演算法未用到這一特點,故這兩種排序演算法可基於鍊錶實現 插入排序 迭代器 p順序訪問鍊錶 迭代器 i順序訪問前 p 個元素 主要的操作為 當p i p.value刪除原位置的 p將p插入 i 1 與 i 之間 若為單向鍊錶,儲存 i 1與 p 1 演算法複雜...