NickAndNick

Удаляем дубликаты в массиве

Jul 4th, 2014
280
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <utility>
  3.  
  4. using namespace std;
  5.  
  6. int remove_duplicates(int*, int);
  7. int search_duplicat(int*, const int, int, int);
  8. void remove_element(int*, const int, int);
  9. void print(int*, const int);
  10.  
  11. int main() {
  12.     const int buffer = 11;
  13.     int arr[buffer] = { 1, 2, 1, 3, 2, 1, 2, 1, 2, 1, 2 };
  14.     int size = buffer;
  15.     print(arr, size);
  16.     size = remove_duplicates(arr, size);
  17.     print(arr, size);
  18.     cin.get();
  19. }
  20.  
  21. int remove_duplicates(int* arr, int size) {
  22.     int index;
  23.     for (int i = 0; i < size - 1; ++i) {
  24.         for (int j = i + 1; j < size; ++j) {
  25.             index = 0;
  26.             while ((index = search_duplicat(arr, size, arr[i], j)) != -1) {
  27.                 if (index) {
  28.                     remove_element(arr, size, index);
  29.                     --size;
  30.                 }
  31.             }
  32.             if (index = -1) break;
  33.         }  
  34.     }
  35.     return size;
  36. }
  37.  
  38. int search_duplicat(int* arr, const int size, int element, int beg) {
  39.     if (beg >= size) return -1;
  40.     do if (arr[beg] == element) return beg; while (++beg < size);
  41.     return  -1;
  42. }
  43.  
  44. void remove_element(int* arr, const int size, int index) {
  45.     for (int i = index; i < size - 1; ++i) swap(arr[i], arr[i + 1]);
  46. }
  47.  
  48. void print(int* arr, const int size) {
  49.     for (int i = 0; i < size; ++i) cout << ' ' << arr[i];
  50.     cout << endl;
  51. }
RAW Paste Data