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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【数组】 - 有序数组设计

發布時間:2023/12/20 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【数组】 - 有序数组设计 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2019獨角獸企業重金招聘Python工程師標準>>>

有序數組:數組存儲有序的元素

不足:暫不考慮重復數組元素的問題

思路:通過代理模式,代理Java已實現的數組對象,實現有序數組的功能

有序數組結構主體


package com.zhiwei.array;public class OrderArray {private int[] orderArray;private int nElems; //非空元素個數private int initSize; //數組最大容納元素個數public OrderArray(int initSize){this.orderArray = new int[initSize];this.nElems = 0;this.initSize = initSize;} }

添加新元素:addElem(int value)


①:數組已經初始化其內存空間是不能發生改變的,因此數組添加新元素的時候需要考慮數組的存儲空間是否有限的問題 ②:新元素有序插入:確定新元素位置--> 原數組受影響元素向后移動1位--> 存放新元素 ③:更新數組的屬性信息:非空元素個數等

public boolean addElem(int value){if(nElems>=initSize){ return false;}int index = 0; for(int i=0;i<nElems;i++){if (value < orderArray[i]){index = i; break;}}//最后一個非空元素開始后移1位for(int j=nElems-1;j>=index;j--){orderArray[j+1] = orderArray[j];}orderArray[index] = value;nElems++;return true;}

刪除元素:delElem(int value)


  • 檢查原數組是否包含指定值的元素,如果不存在則不處理
  • 有序數組刪除元素:確定目標元素位置--> 受影響元素前移動1位--》重置原數組最后一個元素值
  • 更新有序數組屬性:非空元素個數等 注意:元素添加的時候已經保證元素的順序,刪除不影響原有的排列順序
  • public boolean delElem(int value){boolean flag = false;int index = 0;for(int i=0;i<nElems;i++){ if(value == orderArray[i]){index = i;flag = true;break;}}if(!flag) return false;for(int i=index;i<nElems-1;i++){ orderArray[i] = orderArray[i+1];}orderArray[nElems-1] = 0; nElems--;return true;}

    更新元素:updateElem(int index,int value)


  • 檢查設置的元素下表是否越界
  • 保證更新后的數組的有序:更新指定的元素->排序
  • public boolean updateElem(int index,int value){if(index>=nElems) return false;orderArray[index] = value;sortArray(); //重新排序:這里采用冒泡法return true;}

    冒泡排序法


    思想:每次排序都將最大或者最小的元素篩選出來放在最后,然后一次對剩下的元素進行最值篩選,最后形成有序的序列 sortArray()方法:

    public void sortArray(){for(int i=0;i<nElems;i++){for(int j=0;j<nElems-i-1;j++){if(orderArray[j]>orderArray[j+1]){int temp = orderArray[j];orderArray[j] = orderArray[j+1];orderArray[j+1] = temp;}}}}

    數組遍歷展示:show()

    public void show(){StringBuffer sb = new StringBuffer();sb.append("數組元素:[");for(int i=0;i<nElems;i++){sb.append(orderArray[i]+",");}sb.deleteCharAt(sb.length()-1).append("]");System.out.println(sb);}

    返回數組長度:length()


    public int length(){return nElems;}

    測試代碼


    OrderArray orderArray = new OrderArray(10); orderArray.addElem(10);orderArray.addElem(8);orderArray.addElem(9);orderArray.addElem(5);orderArray.addElem(8);orderArray.addElem(7);orderArray.show();orderArray.delElem(11);orderArray.show();orderArray.delElem(8);orderArray.delElem(9);orderArray.show();orderArray.updateElem(3,6);orderArray.show();System.out.println(orderArray.length());

    結果:

    補充說明:

    因為是有序數組,通過addElem()方法添加新元素時,元素自動排序插入,因此插入元素順序和數組存儲的元素下標順序并沒有絕對的對應的關系,因此未提供正對索引的賦值或取值的操作方法

    轉載于:https://my.oschina.net/yangzhiwei256/blog/3008636

    總結

    以上是生活随笔為你收集整理的【数组】 - 有序数组设计的全部內容,希望文章能夠幫你解決所遇到的問題。

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