2013-12-04 3 views
1

Как отсортировать массив без использования цикла на C++? Я думаю, что он может использовать рекурсию, но я не знаю, как ее реализовать.Как отсортировать без использования цикла

+1

Можете ли вы описать, почему вы хотите это сделать, и что вы пробовали до сих пор? Вы имеете в виду «без каких-либо петель вообще» или «без основной логики, представляющей собой гигантскую петлю»? Какие исследования вы провели в алгоритмах сортировки? Пожалуйста, предоставьте более подробное описание вашего вопроса, включая ваши исследования. – templatetypedef

+0

Mergesort - довольно известный алгоритм деления и покорения рекурсивных алгоритмов. Википедия и StackOverflow смогут предоставить вам всю необходимую вам информацию. Если вы не понимаете рекурсию, я бы начал там сначала. –

+0

О, звуки сортировки ... http://www.youtube.com/watch?v=67ta5WTjjUo&list=PLZh3kxyHrVp_AcOanN_jpuQbcMVdXbqei – Homer6

ответ

0

Я думаю, что вы ищете Quicksort Algorithm

+1

В зависимости от вашего определения «без циклов» стандартная quicksort может не работать из-за цикла, участвующего в шаге разбиения. – templatetypedef

0

Есть несколько способов сортировки массива.

Если вы пытаетесь реализовать цикл рекурсивно, вы можете проверить статью в википедии. Это хорошо объяснено в разделе «Рекурсия компьютерной науки». В противном случае вы можете попробовать реализовать различные алгоритмы сортировки. Хорошо известны Quicksort и Mergesort. Существует много алгоритмов сортировки

+0

Хорошо, но как ему реализовать без цикла, используя только рекурсию? Я понимаю рекурсию более или менее, но я хотел бы получить код и anazlize его. Это был бы отличный урок. – user3067773

0
#include<stdio.h> 

int * sort(int *p,int i,int j,int size) 
{ 
    if(i<size) 
    { 
     if(j<size-i-1) 
     { 
      if(p[j]>p[j+1]) 
      { 
       int temp = p[j]; 
       p[j] = p[j+1]; 
       p[j+1] = temp; 
      } 


     } 
     else 
     { 
      j=0; 
      ++i; 
     } 

     p = sort(p,i,++j,size); 
    } 

возвращение p; }

int main() 
{ 
    int array[] ={1,5,2,7,3}; 
    int len = sizeof(array)/sizeof(int); 
    int *a = sort(array,0,0,len); 
    for(int i=0;i<len;i++) 
    { 
     printf("\n array[%d]->%d",i,a[i]); 
    } 
} 
+0

если вы найдете мой ответ правильно и полезно, пожалуйста, проголосуйте за мой ответ –

+0

Как насчет того, чтобы вы сначала отступали правильно? – crashmstr

+0

Извините, моя ошибка. Как насчет сейчас ? –

0
//C++ 
void bubblesort(vector<int> &arr, int iteration) { 
    if(iteration == 0) 
     return; 

    bubbleswap(arr, 0, 1, iteration); 
    bubblesort(arr, iteration-1); 
} 


void bubbleswap(vector<int> &arr, int i, int j, int n) { 

    if(j>=n) 
     return ; 

    if(arr[i] < arr[j]){ 
     swap(arr[i], arr[j]); 
    } 

    bubbleswap(arr, i+1, j+1, n); 
} 


void sort(vector<int> &arr) { 

    int n = arr.size(); 

    if(n<=1) 
     return ; 


    bubblesort(arr, n); 

} 
0

Использование std::sort определено в алгоритм заголовочного файла

#include <iostream> 
#include <algorithm> 
using namespace std; 

int main() 
{ 
    int a[]={5,3,4,1,2}; 
    sort(a,a+5); 
    for(int i=0;i<5;i++) 
     cout<<a[i]<<" ";   // 1 2 3 4 5 
    return 0; 
} 
Смежные вопросы