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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

排序算法-查找算法

發布時間:2024/7/19 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 排序算法-查找算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

排序算法

冒泡排序

  • 從左向右掃描數據,選著最大的數據。
  • 要點:比較相鄰的兩個數,如果左邊的數大于右邊的數就進行交換。
  • template<class T>

    void BubbleSort(T *array, const int length)

    {

    ???????? for (int i = 0; i <length-1; i++)

    ???????? {

    ?????????????????? for (int j = i+1; j <length; j++)

    ?????????????????? {

    ??????????????????????????? if (array[i]> array[j])

    ???????????????????????????????????? std::swap(array[i], array[j]);

    ?????????????????? }

    ???????? }

    }

    選擇排序

  • 從當前未排序的整數中選著一個最小的整數,將他放在已排序按的整數列表的最后。
  • 要點:選擇排序最小的
  • 冒泡排序與選擇排序
  • template<class T>

    void SelectSort(T *array, const int length)

    {

    ???????? for (int i = 0; i < length; i++)

    ???????? {

    ?????????????????? int min = i;

    ?????????????????? for (int j = i + 1; j < length; j++)

    ?????????????????? {

    ??????????????????????????? if (array[j] < array[min])

    ???????????????????????????????????? min = j;

    ?????????????????? }

    ?????????????????? std::swap(array[i], array[min]);

    ???????? }

    }

    ?

    ?

    ?

    查找算法

    順序查找

  • 數據沒排序,查找速度慢
  • template<class T>

    int SequentSearch(T *array, const int length,const T x)

    {

    ???????? int i;

    ???????? for (i = 0; i < length; i++)

    ???????? {

    ?????????????????? if (array[i] == x)

    ??????????????????????????? return i;

    ???????? }

    ???????? return -1;

    }

    二分查找

  • 數據需要排序,查找速度快
  • template<class T>

    int BinarySearch(T *array, const int length, const T x)

    {

    ???????? int low, hight, mid;

    ???????? low = 0, hight = length - 1;

    ?

    ???????? while (low <= hight)

    ???????? {

    ?????????????????? mid = (low + hight) / 2;

    ?????????????????? if (array[mid] == x)

    ??????????????????????????? return mid;

    ?????????????????? else if (array[mid] < x)

    ??????????????????????????? low = mid + 1;

    ?????????????????? else if (array[mid] >x)

    ??????????????????????????? hight = mid - 1;

    ???????? }

    ???????? return -1;

    }

    ?

    ?

    ?

    ?

    遞歸算法

  • 難點:多入口遞歸算法的實現,遞歸實現的代碼都可以是使用使用循來實現,遞歸耗費內存,在自己調用自己是,是否應該加return,需要考慮,一般需要加上return。遞歸算法需要深入研究才能掌握。
  • 遞歸二分查找算法

    template<class T>

    int Recursive_BinarySearch(T * array, const int length, const T x,const int left ,const int right)

    {

    ???????? if (left <= right)

    ???????? {

    ?????????????????? int mid = (left + right) / 2;

    ?????????????????? if (x < array[mid])

    ??????????????????????????? return Recursive_BinarySearch(array, length, x, left, mid - 1);

    ? ? ? ? ? ? ? ? ? ? ? ? ? ?// 注意函數前需要加一個return,沒加return,結果不正確

    ?????????????????? else if(x > array[mid])

    ??????????????????????????? return Recursive_BinarySearch(array, length, x, mid+ 1, right);

    ?????????????????? else return mid;

    ???????? }

    ???????? return-1;

    }

    ?

    遞歸實現排列組合問題

    template<class T>

    void Permutations(T * array,int left,int right)

    {

    ???????? if (left == right)

    ???????? {

    ?????????????????? for (int i = 0; i < right; i++)

    ??????????????????????????? cout << array[i];

    ?????????????????? cout << endl;

    ???????? }

    ???????? else

    ???????? {

    ?????????????????? for (int i = left; i < right; i++)

    ?????????????????? {

    ??????????????????????????? std::swap(array[left], array[i]);

    ??????????????????????????? Permutations(array,left+1,right);

    ??????????????????????????? std::swap(array[left], array[i]);

    ?????????????????? }

    ???????? }

    }

    #include<iostream> using namespace std;//排序算法 template<class T> void BubbleSort(T *array, const int length);//冒泡 template<class T> void B_sort(T *array, const int length); template<class T> void SelectSort(T *array, const int length);//選擇//T *array,使用指針,速度快,傳遞的數數組的地址,T array[],這種寫法為傳值,需要大量復制數據//查找算法 template<class T> int SequentSearch(T *array, const int length, const T x);//順序查找,沒排序的數據 template<class T>int Recursive_BinarySearch(T *array, const int length, const T x,const int left=0,const int right=0);//遞歸二分查找,排序的數據 template<class T>int BinarySearch(T *array, const int length, const T x);//二分查找,排序的數據 template<class T>void Permutations(T *array,int left,int right);//實現數組中元素的所有組合 int main() {double a[] = { 1.1,1.9,2.5,9.2,9.5,4.0,3.2,4.5,6.7,8.4 };BubbleSort(a, 10); cout << "冒泡排序:" << endl;for (int i = 0; i < 10; i++){cout << a[i] << endl;}B_sort(a, 10); cout << "冒泡排序:" << endl;for (int i = 0; i < 10; i++){cout << a[i] << endl;}int b[] = {5,6,1,4,8,3,6,7,2,9,0 };SelectSort(b, 10); cout << "選擇排序:" << endl;for (int i = 0; i < 10; i++){cout << b[i] << endl;}double x = 4.0;int i = SequentSearch(a, 10, x);if (i > 0){cout << "順序查找:" << endl; cout << i<<","<<a[i] << endl;}int y =8;int j = BinarySearch(b, 10,y);if (j> 0)cout << j<< "," << b[j] << endl;double z =5;int k = Recursive_BinarySearch(a, 10,z,0,10);if (k > 0){cout << "遞歸查找:" << endl;cout << k << "," << b[k] << endl;}char ch[] = { 'a','b','c' };cout << "字母組合:" << endl;Permutations(ch,0, 3);system("pause");return 0; }template<class T> void BubbleSort(T *array, const int length) {for (int i = 0; i < length; i++){for (int j = 0; j < length - 1 - i; j++){if(array[j]> array[j+1])std::swap(array[j],array[j+1]);}} }template<class T> void B_sort(T *array, const int length) {for (int i = 0; i <length-1; i++){for (int j = i+1; j <length; j++){if (array[i]> array[j])std::swap(array[i], array[j]);}} }template<class T> void SelectSort(T *array, const int length) {for (int i = 0; i < length; i++){int min = i;for (int j = i + 1; j < length; j++){if (array[j] < array[min])min = j;}std::swap(array[i], array[min]);} }template<class T> int SequentSearch(T *array, const int length,const T x) {int i;for (i = 0; i < length; i++){if (array[i] == x)return i;}return -1; }template<class T> int Recursive_BinarySearch(T * array, const int length, const T x,const int left ,const int right) {if (left <= right){int mid = (left + right) / 2;if (x < array[mid])return Recursive_BinarySearch(array, length, x, left, mid - 1);// 注意函數前需要加一個return,沒加return,結果不正確else if(x > array[mid])return Recursive_BinarySearch(array, length, x, mid+ 1, right);else return mid;}return-1; }template<class T> int BinarySearch(T *array, const int length, const T x) {int low, hight, mid;low = 0, hight = length - 1;while (low <= hight){mid = (low + hight) / 2;if (array[mid] == x)return mid;else if (array[mid] < x)low = mid + 1;else if (array[mid] >x)hight = mid - 1;}return -1; }template<class T> void Permutations(T * array,int left,int right) {if (left == right){for (int i = 0; i < right; i++)cout << array[i];cout << endl;}else{for (int i = left; i < right; i++){std::swap(array[left], array[i]);Permutations(array,left+1,right);std::swap(array[left], array[i]);}} }

    結果:

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    總結

    以上是生活随笔為你收集整理的排序算法-查找算法的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。