日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

面试笔试排序算法

發(fā)布時(shí)間:2025/3/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 面试笔试排序算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
1 // 冒泡排序 2 // 2個(gè)相鄰的元素相互比較,不滿足順序則交換;每遍歷一次數(shù)組,使一個(gè)元素處于最終位置。 3 void BubbleSort(std::vector<int>& nums) 4 { 5 if(nums.empty()) 6 { 7 return; 8 } 9 10 bool sorted = false; // 假設(shè)沒(méi)有排好序 11 size_t n = nums.size(); 12 13 while(!sorted) 14 { 15 sorted = true; // 假設(shè)已經(jīng)排好序 16 for(int i = 1; i < n; ++i) 17 { 18 if(nums[i-1] > nums[i]) 19 { 20 std::swap(nums[i-1], nums[i]); 21 sorted = false; // 恢復(fù)為已排好序 22 } 23 } 24 --n; // 已經(jīng)排好序的元素不必再參與排序了 25 } 26 } 27 46 // 快速排序 47 // 隨機(jī)在數(shù)組中選擇一個(gè)元素,作為劃分元素,將數(shù)組中比劃分元素小的交換到左側(cè), 48 // 比劃分元素大的交換到右側(cè),最后將劃分元素交換到左右區(qū)間的連接處,則劃分元素處于了最終位置; 49 // 遞歸地對(duì)左右區(qū)間進(jìn)行快速排序。 50 int Partition(vector<int>& vec, int low, int up) 51 { 52 int pivot = vec[up]; 53 int i = low - 1; 54 55 for(int j = low; j < up; ++j) 56 { 57 if(vec[j] <= pivot) 58 { 59 ++i; 60 std::swap(vec[i], vec[j]); 61 } 62 } 63 std::swap(vec[i+1], vec[up]); 64 65 return i+1; 66 } 67 68 void QuickSort(vector<int>& vec, int low, int up) 69 { 70 if(low < up) 71 { 72 int mid = Partition(vec, low, up); 73 74 QuickSort(vec, low, mid - 1); 75 QuickSort(vec, mid + 1, up); 76 } 77 }

?

1 /* 2 插入排序 3 */ 4 void InsertionSort(std::vector<int>& vec) 5 { 6 int num = vec.size(); 7 8 for (int i = 1; i < num; ++i) 9 { 10 for (int j = i; j > 0 && vec[j] < vec[j - 1]; --j) 11 { 12 std::swap(vec[j], vec[j - 1]); 13 } 14 } 15 }

?

1 /* 2 歸并排序 3 */ 4 5 class MergeSort 6 { 7 public: 8 void merge(std::vector<int>& vec, int low, int mid, int high) 9 { 10 int i = low; int j = mid + 1; 11 12 for (int k = low; k <= high; ++k) 13 { 14 aux_[k] = vec[k]; 15 } 16 17 for (int k = low; k <= high; ++k) 18 { 19 if (i > mid) 20 { 21 vec[k] = aux_[j++]; 22 } 23 else if (j > high) 24 { 25 vec[k] = aux_[i++]; 26 } 27 else if (aux_[j] < aux_[i]) 28 { 29 vec[k] = aux_[j++]; 30 } 31 else 32 { 33 vec[k] = aux_[i++]; 34 } 35 } 36 } 37 38 void merge_sort(std::vector<int>& vec, int low, int high) 39 { 40 if (low >= high) 41 { 42 return; 43 } 44 45 int mid = low + (high - low) / 2; 46 47 merge_sort(vec, low, mid); 48 merge_sort(vec, mid + 1, high); 49 merge(vec, low, mid, high); 50 } 51 52 void sort(std::vector<int>& vec, int low, int high) 53 { 54 aux_.resize(vec.size()); 55 merge_sort(vec, 0, vec.size() - 1); 56 } 57 58 private: 59 static std::vector<int> aux_; 60 }; 61 62 std::vector<int> MergeSort::aux_;

?

/* 選擇排序 */ void SelectionSort(std::vector<int>& vec) {int num = vec.size(); // 向量大小for (int i = 0; i < num; ++i) // 外循環(huán) 從下標(biāo)0開(kāi)始 {int min = i; // 最小元素的下標(biāo)for (int j = i + 1; j < num; ++j) // 從i的下一個(gè)元素開(kāi)始 {if (vec[j] < vec[min]){min = j;}}std::swap(vec[i], vec[min]);} }

?

轉(zhuǎn)載于:https://www.cnblogs.com/lijiatu/p/5892332.html

總結(jié)

以上是生活随笔為你收集整理的面试笔试排序算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。