ที่นี่เราจะเห็นแนวคิดพื้นฐานบางประการของการเรียงลำดับอาร์เรย์ อาร์เรย์เป็นโครงสร้างข้อมูลที่เป็นเนื้อเดียวกันเพื่อเก็บข้อมูลประเภทเดียวกันในบางตำแหน่งหน่วยความจำต่อเนื่องกัน บางครั้งเราจำเป็นต้องจัดเรียงองค์ประกอบเพื่อใช้งาน นอกจากนั้น เราสามารถสร้างอาร์เรย์ที่เรียงลำดับได้ ที่จะถูกจัดเรียงเสมอ
ในกรณีนี้ เราจะเห็นอัลกอริธึมสำหรับการแทรกและลบในอาร์เรย์ที่จัดเรียง หากเราแทรกองค์ประกอบบางอย่างเข้าไป องค์ประกอบนั้นจะถูกจัดวางในตำแหน่งที่จัดเรียงโดยอัตโนมัติ ดังนั้นเราจึงไม่ต้องเรียงลำดับอีกครั้งหลังจากแทรก เมื่อเราลบ มันจะลบองค์ประกอบและเติมพื้นที่ว่างโดยเลื่อนองค์ประกอบไปทางขวา ในขณะที่เราใช้ sorted array เราจะใช้อัลกอริทึมการค้นหาแบบไบนารีเพื่อค้นหาองค์ประกอบก่อนที่จะลบออก
อัลกอริทึม
insertSorted(arr, n, key): Begin if n >= max size of the array, then return otherwise i := n – 1 while i >= 0 and arr[i] > key, do arr[i + 1] := arr[i] i := i - 1 done arr[i + 1] := key n := n + 1 End deleteSorted(arr, n, key): Begin pos := search key into arr if pos is -1, then item is not found, and return otherwise i := pos while i < n – 1, do arr[i] := arr[i + 1] i := i + 1 done n := n + 1 End
ตัวอย่าง
#include <iostream> #define MAX 10 using namespace std; void display(int arr[], int n){ for(int i = 0; i <n; i++){ cout << arr[i] << " "; } cout << endl; } int search(int arr[], int low, int high, int key){ if (high < low) return -1; int mid = (low + high) / 2; /*low + (high - low)/2;*/ if (key == arr[mid]) return mid; if (key > arr[mid]) return search(arr, (mid + 1), high, key); return search(arr, low, (mid - 1), key); } void insertSorted(int arr[], int &n, int key){ if (n >= MAX){ cout << "No place to insert"; return; } int i; for (i = n - 1; (i >= 0 && arr[i] > key); i--) arr[i + 1] = arr[i]; arr[i + 1] = key; n = n + 1; } void deleteSorted(int arr[], int &n, int key){ int key_pos = search(arr, 0, n, key); if(key_pos == -1){ cout << "Element is not present." << endl; return; } int i; for (i = key_pos; i < n - 1; i++) arr[i] = arr[i + 1]; n = n - 1; } int main() { int arr[MAX]; int n = 0; insertSorted(arr, n, 10); insertSorted(arr, n, 20); insertSorted(arr, n, 30); insertSorted(arr, n, 40); insertSorted(arr, n, 50); insertSorted(arr, n, 60); insertSorted(arr, n, 70); display(arr, n); deleteSorted(arr, n, 35); deleteSorted(arr, n, 40); deleteSorted(arr, n, 60); display(arr, n); }
ผลลัพธ์
10 20 30 40 50 60 70 Element is not present. 10 20 30 50 70