【アルゴリズム】挿入ソート、バブルソート、選択ソート、集計ソートC言語実装


単純なアルゴリズムは直接コードをつけます
  • 挿入ソート
  • 
    void
    printval(int *a, int n)
    {
    	for (int i = 0; i < n; ++i)
    		std::cout << a[i] << std::endl;
    }
    
    void 
    insertsort(int *a, int n)
    {
    	for (int i = 1; i <= n - 1; i++){
    		int j = i - 1;
    		//val        
    		int val = a[i];
    		for (; j >= 0; j--){
    			//            
    			if (val < a[j]){
    				//           
    				a[j + 1] = a[j];
    			}
    			//               
    			else
    				break;
    		}
    		a[j+1] = val;
    		printval(a, n);
    		std::cout << "_________after one sort" << std::endl;
    	}
    }
  • バブルソート
  • void 
    myswap(int a[], int i, int j)
    {
    	int tmp = a[i];
    	a[i] = a[j];
    	a[j] = tmp;
    }
    
    void 
    bubblesort(int a[], int n)
    {
    	if (a == NULL || n < 2)
    		return;
    	for (int end = n - 1; n > 0; n--){
    		for (int i = 0; i < end; i++){
    			if (a[i] > a[i + 1]){
    				myswap(a, i,i+1);
    			}
    		}
    	}
    }
  • 選択ソート
  • void 
    selectsort(int a[], int n)
    {
    	if (a == NULL || n < 2)
    		return;
    	for (int i = 0; i < n; i++){
    		int min = i;
    		for (int j = i + 1; j < n; j++)
    			min = a[min] < a[j] ? min : j;
    		myswap(a, i, min);
    	}
    }
  • 集計ソート
  • void 
    mergesort(int a[], int n)
    {
    	if (a == NULL || n < 2)
    		return;
    	mergesort(a, 0, n - 1);
    }
    
    void 
    mergesort(int a[], int l,int r)
    {
    	if (a == NULL || (r-l+1) < 2)
    		return;
    	int mid = l + ((r-l)>>1);
    	mergesort(a, l, mid);
    	mergesort(a, mid+1, r);
    	merge(a, l,mid,r);
    }
    
    
    void 
    merge(int a[], int l,int m, int r)
    {
    	//      
    	int len = r - l + 1;
    	//        
    	int *temparry = (int *)malloc(sizeof(int)*len);
    	int i = l;
    	int j = m+1;
    	//         
    	int index = 0;
    	while (i <= m && j <= r){
    		temparry[index++] = a[i] < a[j] ? a[i++] : a[j++];
    	}
    	//      
    	while (i <= m){
    		temparry[index++] = a[i++];
    	}
    	while (j<=r)
    		temparry[index++] = a[j++];
    	//             
    	for (int i = 0; i < len; i++)
    		a[l + i] = temparry[i];
    	delete temparry;
    }