Advertisement
AgungAlfiansyah

Untitled

Oct 22nd, 2015
367
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdlib.h>
  3. #include <cmath>
  4.  
  5. using namespace std;
  6. const int jdata=1024*1024;
  7.  
  8. int data[jdata];
  9. int sdata[jdata];
  10.  
  11. void min(int *data,int &index, int &value){
  12.     index=0; value=data[index];
  13.     for (int i=1; i<jdata; i++)
  14.         if (value>data[i]) {
  15.             value = data[i];
  16.             index =i;
  17.         }
  18. }
  19.  
  20. void max(int *data,int &index, int &value){
  21.     index=0; value=data[index];
  22.     for (int i=1; i<jdata; i++)
  23.         if (value<data[i]) {
  24.             value = data[i];
  25.             index =i;
  26.         }
  27. }
  28.  
  29. void selectionsort(int *data, int *sdata, bool asc){
  30.     int index, value;
  31.     for (int i=0; i<jdata; i++){
  32.         if (asc){
  33.             min(data,index, value);
  34.             sdata[i]=value; data[index]=100000000;
  35.         } else {
  36.             max(data,index, value);
  37.             sdata[i]=value; data[index]=-100000000;
  38.         }
  39.     }
  40. }
  41.  
  42. void optimizedselectionsort(int *data, bool asc){
  43.     int temp;
  44.     for (int i=0; i<jdata-1; i++){
  45.         for (int j=i+1; j<jdata; j++){
  46.             if (asc){
  47.                 if (data[i] < data[j]){
  48.                     temp = data[j]; data[j]=data[i]; data[i]=temp;
  49.                 }
  50.             else {
  51.                 if (data[i] > data[j]){
  52.                     temp = data[j]; data[j]=data[i]; data[i]=temp;
  53.                 }
  54.             }
  55.         }
  56.         }
  57.     }
  58.     for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  59. }
  60.  
  61.  
  62. void bubblesort(int *data, bool asc){
  63.     int temp;
  64.     for (int i=jdata-1; i>1; i--){
  65.         for (int j=0; j<i; j++){
  66.             if (asc){
  67.                 if (data[j]>data[j+1]){
  68.                     temp=data[j]; data[j]=data[j+1];data[j+1]=temp;
  69.                 }
  70.             } else {
  71.                 if (data[j]<data[j+1]){
  72.                     temp=data[j]; data[j]=data[j+1];data[j+1]=temp;
  73.                 }
  74.             }  
  75.         }
  76.     }
  77. }
  78.  
  79. void InsertionSort(int *data) {
  80.       int i, j, tmp;
  81.       for (i = 1; i < jdata; i++) {
  82.             j = i;
  83.             while (j > 0 && data[j-1] > data[j]) {
  84.                   tmp = data[j];
  85.                   data[j] = data[j-1];
  86.                   data[j-1] = tmp;
  87.                   j--;
  88.             }
  89.       }
  90. }
  91.  
  92. void QuickSort(int *data, int left, int right) {
  93.       int i = left, j = right;
  94.       int tmp;
  95.       int pivot = data[(left + right) / 2];
  96.  
  97.       /* partition */
  98.       while (i <= j) {
  99.             while (data[i] < pivot)
  100.                   i++;
  101.             while (data[j] > pivot)
  102.                   j--;
  103.             if (i <= j) {
  104.                   tmp = data[i];
  105.                   data[i] = data[j];
  106.                   data[j] = tmp;
  107.                   i++;
  108.                   j--;
  109.             }
  110.       };
  111.  
  112.       /* recursion */
  113.       if (left < j)
  114.             QuickSort(data, left, j);
  115.       if (i < right)
  116.             QuickSort(data, i, right);
  117. }
  118.  
  119.  
  120.  
  121.  
  122. /*
  123.   Fungsi merge untuk menggabungkan 2 buah array yang telah terurut sebelumnya
  124.   Array ini bisa saja berisi hanya 1 element
  125.   INPUT:
  126.      numbers = array integer yang akan diurutkan sebagai hasil penggabungan 2 array
  127.      left, mid, right = posisi kiri, tengah dan kanan array
  128.   OUTPUT:
  129.      Tidak ada, tetapi variable numbers akan berubah
  130. */
  131. void Merge(int *data, int left, int mid, int right){
  132.   //int * temp = new int [jdata];
  133.   int temp [jdata];
  134.   int i, left_end, num_elements, tmp_pos;
  135.  
  136.   left_end = (mid - 1);
  137.   tmp_pos = left;
  138.   num_elements = (right - left + 1);
  139.    
  140.   while ((left <= left_end) && (mid <= right)){
  141.     if (data[left] <= data[mid])
  142.     temp[tmp_pos++] = data[left++];
  143.     else
  144.     temp[tmp_pos++] = data[mid++];
  145.   }
  146.    
  147.   while (left <= left_end) temp[tmp_pos++] = data[left++];
  148.  
  149.   while (mid <= right) temp[tmp_pos++] = data[mid++];
  150.  
  151.   for (i = 0; i < num_elements; i++) {
  152.     data[right] = temp[right];
  153.     right--;
  154.     }
  155.   }
  156.  
  157. /*
  158.   Fungsi MergeSort untuk mengurutkan array satu bilangan dengan Merge sort
  159.   Array ini bisa saja berisi hanya 1 element
  160.   INPUT:
  161.      numbers = array integer yang akan diurutkan sebagai hasil penggabungan 2 array
  162.      left, mid, right = posisi kiri, tengah dan kanan array
  163. */
  164. void MergeSort(int *data, int left, int right){
  165.   int mid;
  166.    
  167.   if (right > left) {               //selama jumlah array masih > 1 lakukan hal ini
  168.     mid = (right + left) / 2;       // bagi menjadi dua bagian
  169.     MergeSort(data, left, mid);  //urutkan masing-masing
  170.     MergeSort(data, (mid + 1), right);
  171.    
  172.     Merge(data, left, (mid+1), right);  //gabungkan hasilnya.
  173.     }
  174. }
  175.  
  176.  
  177.  
  178.        
  179. int main(){
  180.     int * data = new int [jdata];
  181.     for (int i=0; i<jdata; i++) data[i]=random()%jdata;
  182.    
  183.     //testing maximum minimum
  184.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  185.     //int val,index;
  186.     //max(data,val,index);
  187.     //cout << "min :" << val << "  index:" << index <<endl;
  188.     //min(data,val,index);
  189.     //cout << "min :" << val << "  index:" << index <<endl;
  190.    
  191.     //testing selection sort
  192.     //for (int i=1024-32; i<jdata; i++) cout << data[i] <<endl;
  193.     //selectionsort(data,sdata,true);
  194.     //cout <<endl;
  195.     //for (int i=1024-32; i<jdata; i++) cout << sdata[i] <<endl;
  196.    
  197.     //testing optimizwd selection sort
  198.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  199.     //cout <<endl;
  200.     //optimizedselectionsort(data,false);
  201.     //cout <<endl;
  202.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  203.  
  204.     //testing bubble sort
  205.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  206.     //bubblesort(data,true);
  207.     //cout <<endl;
  208.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  209.    
  210.     //testing Quick Sort
  211.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  212.     //QuickSort(data, 0, jdata - 1);
  213.     //cout <<endl;
  214.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  215.    
  216.     //testing Merge Sort
  217.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  218.     //MergeSort(data, 0, jdata - 1);
  219.     //cout <<endl;
  220.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  221.    
  222.     //testing Insertion sort
  223.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  224.     InsertionSort(data);
  225.     //cout <<endl;
  226.     //for (int i=0; i<jdata; i++) cout << data[i] <<endl;
  227.    
  228.     bool urut=true;
  229.     for (int i = 1; i < jdata; i++)    // tampilkan bilangan, uncomment jika diperlukan
  230.         if (data[i-1]>data[i]) {
  231.             urut=false; break;
  232.         }
  233.     if (urut) cout << "data urut"; else cout << "data tidak urut";  
  234.  
  235. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement