有序数组的增删改查

女爷i 2024-03-26 19:03 112阅读 0赞
  1. public class ArrDemo {
  2. private int[] arr = new int[20];
  3. private int flag = 0;
  4. public void add(int x){
  5. System.out.print("插入的新数据:" +x+" ");
  6. if(flag==arr.length){
  7. int[] arrNew = new int[arr.length*2];
  8. for (int i = 0;i< arrNew.length;i++){
  9. arrNew[i]=arr[i];
  10. }
  11. arr=arrNew;
  12. }
  13. //找到插入的正确位置
  14. if(flag==0){
  15. arr[0]=x;
  16. flag++;
  17. return;
  18. }
  19. int insertIndex=getInsertIndex(x);
  20. for(int i = flag;i>insertIndex;i--){
  21. arr[i] = arr[i-1];
  22. }
  23. flag++;
  24. arr[insertIndex]=x;
  25. }
  26. public int getIndex(int x){
  27. int left = 0;
  28. int right = arr.length-1;
  29. while (left<=right){
  30. int middle = (left+right)/2;
  31. if (arr[middle]==x){
  32. return middle;
  33. }else if(arr[middle]<x){
  34. left=middle+1;
  35. }else {
  36. right=middle-1;
  37. }
  38. }
  39. return -1;
  40. }
  41. //有序数组要插入的位置
  42. public int getInsertIndex(int x){
  43. int left = 0;
  44. int right = flag-1;
  45. while (left <= right){
  46. int middle = (left+right)/2;
  47. if (arr[middle]==x){
  48. return middle;
  49. }else if(arr[middle]<x){
  50. left=middle+1;
  51. }else {
  52. right=middle-1;
  53. }
  54. }
  55. int middles = (left+right)/2; //防止右侧越界
  56. if(arr[middles] >= x){
  57. return middles;
  58. }else{
  59. return middles+1;
  60. }
  61. }
  62. public void change(int oldNum,int newNum){
  63. int index = getIndex(oldNum);
  64. arr[index]=newNum;
  65. }
  66. public void del(int x){
  67. int index = getIndex(x);
  68. for (int i =index;i<flag-1;i++){
  69. arr[i]=arr[i+1];
  70. }
  71. flag--;
  72. }
  73. public void show(){
  74. for (int i =0;i<flag;i++){
  75. System.out.print("arr["+i+"]:"+arr[i]+" ");
  76. }
  77. }

测试:

  1. public class ArrTest {
  2. public static void main(String[] args) {
  3. ArrDemo arrDemo = new ArrDemo();
  4. arrDemo.add(1);arrDemo.add(8);arrDemo.add(9999);arrDemo.add(12);
  5. arrDemo.add(5);arrDemo.add(55);arrDemo.add(-14);arrDemo.add(666);
  6. System.out.println("--------------------------------");
  7. arrDemo.show();
  8. }
  9. }

d4859a67ce3d4904a1532207b348cabf.png


今日状态不佳,字少谅解!f13df843377f48da807d37b66327d838.jpeg

发表评论

表情:
评论列表 (有 0 条评论,112人围观)

还没有评论,来说两句吧...

相关阅读