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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【蛮力算法】数据结构与算法

發布時間:2023/12/8 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蛮力算法】数据结构与算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

蠻力算法也稱為窮舉法暴力法,它是算法設計中最常見的方法之一。蠻力算法的基本思路是對問題的所有可能狀態一一測試,直到找到解或將全部可能狀態都測試為止。

蠻力算法的概述

????????蠻力法是一種簡單、直接地解決問題的方法,通常直接基于問題的描述和所涉及的概念定義。

蠻力算法是基于計算機運算速度快這一特性,在解決問題時采用的一種“懶惰”策略。

蠻力算法的優點:

  • 邏輯清晰,編寫程序簡潔
  • 可以用來解決廣闊領域的問題
  • 對于一些重要的問題,它可以產生一些合理的算法
  • 可以解決一些下小規模的問題
  • 可以作為其他高效算法的衡量標準

蠻力算法的缺點:
? ? ? ? 設計的大多數算法的效率都不高,主要適合問題規模較小的問題求解

蠻力算法的基本應用:

采用蠻力算法的一般格式

例題:
? ? ? ? 編寫一個程序,求這樣的四位數:該四位數的千位上的數字和百位上的數字都是被擦掉的,現知道十位上的數是1,個位上的數為2,已知這個數減去7就能被7整除,減去8就能被8整除,減去9就能被9整除。

代碼如下:

package 蠻力算法;public class Demo01 {/*設這個數為ab12,則n = a*1000 + b*100 + 10 + 2,且有0 < a <= 9, 0 <= b <= 9*/public static void main(String[] args) {for (int a = 1; a <= 9; a++) {for (int b = 0; b <= 9; b++) {int n = a*1000 + b*100 + 10 + 2;if ((n - 7) % 7 == 0 && (n - 8) % 8 == 0 && (n - 9) % 9 == 0){System.out.println("這個數為:" + n);//輸出的幾結果為 這個數為: 1512}}}} }

簡單的選擇排序和冒泡排序

選擇排序

? ? ? ? 選擇排序是一種簡單直觀的排序算法。首先在未排序的序列中找到一個最小(最大)元素,與起始位置的元素進行交換。然后,再從剩余未排序元素中繼續尋找最小(最大)元素,然后與已排序元素的下一個位置的元素進行交換,反復循環,直到排序完成。

?代碼如下:
?

public class Demo {public static void main(String[] args) { int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};//將數組的長度賦值給lenint len=arr.length;for (int i = 0; i < len; i++) {//nums[i]放最小值 [i,len-1]int index=i;//min對應的位置//遍歷數組與arr[index]比較for (int j = i+1; j < len; j++) {if(arr[index]>arr[j]) {//如果有比arr[index]小的元素,就把這個元素的下標賦值給index,遍歷完后index拿到的就是最小值的下標index=j;}}//交換 min對應的位置上的值和i位置上的值交換if(index!=i) {int temp=arr[i];arr[i]=arr[index];arr[index]=temp;}}for (int i : arr) {System.out.print(i+" ");}}}

冒泡排序:

????????冒泡排序是一種簡單的排序算法。它重復地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。

算法描述

  • 比較相鄰的元素。如果第一個比第二個大,就交換它們兩個;
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最后一對,這樣在最后的元素應該會是最大的數;
  • 針對所有的元素重復以上的步驟,除了最后一個;
  • 重復步驟1~3,直到排序完成。

?代碼如下:
?

public class Demo{public static void main(String[] args) {int[] arr = {3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 48};int len=arr.length; for (int i = 0; i < len-1; i++) {//優化:如果這一趟沒有發生一次交換,就說明數列已有序boolean f=false;//false 沒有發生交換 true 交換過//遍歷數組for (int j = 0; j < len-1-i; j++) {//如果當前元素比后一個元素大就進行交換。反復循環,直到排序完成if(arr[j]>arr[j+1]) {int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;f=true;}}if(!f) { //如果f = false ,說明一次交換也沒有,則它們已經是順序排序了,直接break跳出循環。break;}}for (int i : arr) {System.out.print(i+" ");}}}

總結

以上是生活随笔為你收集整理的【蛮力算法】数据结构与算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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