• روش های مرتب سازی ابتدایی روش های مرتب سازی خارجی


    8 مرتب سازی درج


    9 A N لازم است آرایه A را به ترتیب صعودی مرتب کنیم که در آن N عنصر با استفاده از روش درج درج می شود.متغیرهای کمکی j j تعداد اولین عنصر باقی مانده است. i i تعداد عنصر منتقل شده است. f f=1 f – شرط خروج از حلقه (اگر f=1، سپس خروج کنید) Val Val – مقدار متوسط، برای جابجایی عناصر آرایه استفاده می شود


    A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم." title="10 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم." class="link_thumb"> 10 !} 10 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله مرحله اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، در غیر این صورت f:=1، مرحله مرحله i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم."> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i - 1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم."> A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم." title="10 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم."> title="10 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم"> !}


    A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم " title="11 شروع الگوریتم چیست. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j :=j+1 پایان الگوریتم What does" class="link_thumb"> 11 !} 11 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله مرحله اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، در غیر این صورت f:=1، مرحله مرحله i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم این شرط به چه معناست؟ A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم "> A[i] به چه معناست پس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1 , مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم. این شرط به چه معناست؟"> A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم " title="11 شروع الگوریتم چیست. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j :=j+1 پایان الگوریتم What does"> title="11 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چه می کند"> !}


    A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می‌شود" title="12 شروع الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می‌دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j :=j+1 پایان الگوریتم چرا شروع می شود" class="link_thumb"> 12 !} 12 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله مرحله اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، در غیر این صورت f:=1، مرحله مرحله i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا مقدار شروع j = 2 است؟ A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می شود"> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم چرا مقدار j =2 را شروع کنید؟> A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می‌شود" title="12 شروع الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می‌دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j :=j+1 پایان الگوریتم چرا شروع می شود"> title="12 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می شود"> !}


    A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می‌شود" title="13 شروع الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می‌شود: مرحله 2.2.1 مرحله 2.2.1 اگر A> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j :=j+1 پایان الگوریتم چرا شروع می شود" class="link_thumb"> 13 !} 13 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله مرحله اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، در غیر این صورت f:=1، مرحله مرحله i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا مقدار شروع i =2 است؟ A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می شود"> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم چرا مقدار i =2 را شروع کنید؟> A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می‌شود" title="13 شروع الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می‌شود: مرحله 2.2.1 مرحله 2.2.1 اگر A> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j :=j+1 پایان الگوریتم چرا شروع می شود"> title="13 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا شروع می شود"> !}


    A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا همیشه "title="14 آغاز الگوریتم است. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می شود: مرحله 2.2.1 مرحله 2.2.1 اگر A >A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم آیا همیشه است" class="link_thumb"> 14 !} 14 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله مرحله اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، در غیر این صورت f:=1، مرحله مرحله i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا عنصر ورودی j همیشه با عنصر مرتب شده مبادله می کند؟ A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا همیشه "> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val، در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i- 1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم. آیا عنصر ورودی j همیشه با عنصر مرتب شده مبادله می‌کند؟> A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا همیشه "title="14 آغاز الگوریتم است. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می شود: مرحله 2.2.1 مرحله 2.2.1 اگر A >A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم آیا همیشه است"> title="14 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا همیشه"> !}


    A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا ممکن است برای" title="15 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام شود: مرحله 2.2.1 مرحله 2.2.1 اگر A>A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم آیا امکان پذیر است" class="link_thumb"> 15 !} 15 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله مرحله اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، در غیر این صورت f:=1، مرحله مرحله i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا می توان حلقه BYT و IF را با یک حلقه BYL با شرط i>=2 و A>A[i] جایگزین کرد؟ A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا ممکن است برای "> A[i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i - 1, مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم آیا می توان حلقه BYT و IF را با یک حلقه BYL با شرط i>=2 و A>A[i] ?"> A[ جایگزین کرد. i] سپس Val:= A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا ممکن است برای" title="15 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام شود: مرحله 2.2.1 مرحله 2.2.1 اگر A>A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم آیا امکان پذیر است"> title="15 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم آیا ممکن است برای"> !}


    A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم "title="16 آغاز الگوریتم چیست. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A> A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم چرا نیاز داریم؟" class="link_thumb"> 16 !} 16 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله مرحله اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، در غیر این صورت f:=1، مرحله مرحله i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم این اپراتور برای چیست؟ A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم چرا به "> A[i] و سپس Val:=A؛ A:=A[i]؛ A[i]:=Val نیاز دارید، در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i - 1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم. این عملگر برای چیست؟»> A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم "title="16 آغاز الگوریتم چیست. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A> A [i] سپس Val:=A؛ A:=A[i]؛ A[i]:=Val در غیر این صورت f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1 پایان الگوریتم چرا نیاز داریم؟"> title="16 آغاز الگوریتم. مرحله 1 مرحله 1 j:=2، مرحله 2 مرحله 2 در حالی که j=2 و f=0 انجام می دهند: مرحله 2.2.1 مرحله 2.2.1 اگر A>A[i] سپس Val:=A; A:=A[i]; A[i]:=Val، دیگری f:=1، مرحله 2.2.2 مرحله 2.2.2 i:=i-1، مرحله 2.3 مرحله 2.3 j:=j+1. پایان الگوریتم برای چه چیزی لازم است"> !}




    18 ماهیت مرتب سازی: عنصر با کمترین مقدار انتخاب شده و با اولین عنصر آرایه مبادله می شود. سپس عنصری با کمترین مقدار از n-1 عنصر باقی مانده پیدا می شود و با عنصر دوم مبادله می شود و به همین ترتیب. قبل از مبادله دو عنصر آخر


    مرتب سازی انتخابی قسمت مرتب شده قسمت مرتب شده آرایه به ترتیب صعودی مرتب شده است


    20 بیان مسئله A N لازم است آرایه A را به ترتیب صعودی مرتب کنیم که در آن N عنصر با روش انتخاب وجود دارد. متغیرهای کمکی j j تعداد اولین عنصر باقی مانده است. i i تعداد عنصر منتقل شده است. min min حداقل عدد موجود در آرایه است. Imin Imin - تعداد حداقل تعداد در آرایه










    25 ماهیت مرتب سازی: آرایه به صورت متوالی مشاهده می شود و هر جفت عنصر با یکدیگر مقایسه می شود. در این صورت، چیدمان «نادرست» عناصر با چیدمان مجدد آنها از بین می رود. فرآیند مشاهده و مقایسه عناصر تا زمانی که کل آرایه مشاهده شود تکرار می شود.


    26 مبادله مرتب سازی


    27 A N لازم است آرایه A را به ترتیب صعودی مرتب کنیم که در آن N عنصر رد و بدل می شود. i i تعداد عنصر منتقل شده است. Val Val یک مقدار میانی است که برای جابجایی عناصر آرایه استفاده می شود


    2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم مقایسه همسایه" title="28 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 اجرا می شود: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i];A[i]:=A;A:=Val، مرحله 2.2.2 مرحله 2.2.2 i=i+1، مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم مقایسه همسایگان" class="link_thumb"> 28 !} 28 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step Step i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم مقایسه عناصر همسایه تعویض عناصر همسایه در صورتی که سمت چپ بزرگتر از سمت راست باشد قسمت مرتب شده تشکیل می شود =2 انجام: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم مقایسه همسایه"> =2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]؛ A[i]:=A؛ A:=Val، مرحله 2.2.2 مرحله 2.2.2 i=i+1، مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم مقایسه عناصر همسایه تبادل عناصر همسایه در صورتی که سمت چپ بزرگتر از سمت راست باشد قسمت مرتب شده "> =2" تشکیل می شود. انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم مقایسه همسایه" title="28 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 اجرا می شود: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i];A[i]:=A;A:=Val، مرحله 2.2.2 مرحله 2.2.2 i=i+1، مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم مقایسه همسایگان"> title="28 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم مقایسه همسایگان"> !}


    2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا شرط "title="29 آغاز الگوریتم است. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 اجرا می شود: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i];A[i]:=A;A:=Val مرحله 2.2.2 مرحله 2.2.2 i=i+1 مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم چرا شرط است" class="link_thumb"> 29 !} 29 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step Step i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا شرایط اینگونه است؟ =2 انجام: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا شرط ta"> =2 برای انجام: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]؛ A[i]:=A؛ A:=Val، Step 2.2. 2 مرحله 2.2.2 i=i+1، مرحله 2.3 مرحله 2.3 j:=j-1. پایان الگوریتم. چرا شرایط به این شکل است؟> =2 انجام: مرحله 2.1 مرحله 2.1 i:=1 ؛، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا شرط "title="29 آغاز الگوریتم است. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 اجرا می شود: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i];A[i]:=A;A:=Val مرحله 2.2.2 مرحله 2.2.2 i=i+1 مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم چرا شرط است"> title="29 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا شرط است"> !}


    2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا j" title="30 شروع الگوریتم است. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 اجرا می شود: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i];A[i]:=A;A:=Val مرحله 2.2.2 مرحله 2.2.2 i=i+1 مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم چرا j است" class="link_thumb"> 30 !} 30 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step Step i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا مقدار j در حال کاهش است؟ آیا امکان افزایش وجود دارد؟ چه چیزی باید تغییر کند؟ =2 انجام: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا مقدار j"> =2 انجام شود: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]؛ A[i]:=A؛ A:=Val، مرحله 2.2. 2 مرحله 2.2.2 i=i+1، مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم چرا مقدار j کاهش می یابد؟ =1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i ]؛ A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا j" title="30 شروع الگوریتم است. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 اجرا می شود: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i];A[i]:=A;A:=Val مرحله 2.2.2 مرحله 2.2.2 i=i+1 مرحله 2.3 مرحله 2.3 j:=j-1 پایان الگوریتم چرا j است"> title="30 آغاز الگوریتم. مرحله 1 مرحله 1 j:=N، مرحله 2 مرحله 2 در حالی که j>=2 انجام دهید: مرحله 2.1 مرحله 2.1 i:=1;، مرحله 2.2 مرحله 2.2 در حالی که iA سپس Val:=A[i]; A[i]:=A; A:=Val، Step 2.2.2 Step 2.2.2 i=i+1، Step 2.3 Step 2.3 j:=j-1. پایان الگوریتم چرا j مقدار است"> !}










    35 12 مرحله مرتب سازی پوسته. مرحله 4 گروه 2 عنصری. 2 گروه 4 عنصری


    36 مرحله مرتب سازی پوسته. 1 گروه از 8 عنصر آرایه به ترتیب صعودی مرتب شده اند


    37 A N لازم است آرایه A را به ترتیب صعودی مرتب کنیم، که در آن N عنصر با روش Shell هستند.متغیرهای کمکی j j تعداد اولین عنصر باقیمانده است. i i تعداد عنصر منتقل شده است. M M - مرحله بهینه P P - مقدار میانی مورد استفاده برای جابجایی عناصر آرایه














    45 ماهیت مرتب سازی: مقداری (x) انتخاب شده است - یک عنصر مانع که با گرد کردن به یک تقسیم عدد صحیح تعداد عناصر مرتب شده بر 2 تعیین می شود. در آرایه تکرار کنید، از چپ به راست حرکت کنید، تا زمانی که عنصری بزرگتر از x وجود داشته باشد، سپس از راست به چپ آن را تکرار کنید تا عنصری کمتر از x وجود داشته باشد.


    46 ماهیت مرتب سازی: عناصر پیدا شده را در مکان ها تغییر می دهیم. اگر بزرگ‌ترین یا کوچک‌ترین عنصر یافت نشد، عنصر میانی با بزرگ‌ترین یا کوچک‌ترین عنصر یافت شده تعویض می‌شود. با رسیدن به وسط، 2 قسمت از آرایه داریم. این روند برای هر قسمت تا مرتب شدن آرایه ادامه می یابد


    7 به سمت راست منتقل می شود، زیرا 16>7 منتقل نمی شود، 47 به سمت راست منتقل می شود، زیرا 16>7، 8>7،11>7، 19>7 منتقل نمی شود، 7=7 شاعر" عنوان ="47 مرتب سازی سریع 812371911416 عنصر مانع 4378123 4 عنصر مانع 8121119 عنصر مانع 1219 1619 >7, 8>7,11>7, 19>7 قابل انتقال نیست, 7=7 شاعر" class="link_thumb"> 47 !} 47 مرتب‌سازی سریع عنصر مانع عنصر مانع >7 به سمت راست منتقل می‌شود زیرا 16>7 قابل حمل نیست، 47 به سمت راست منتقل می‌شود زیرا 16>7، 8>7،11>7، 19>7 قابل انتقال نیست. ، 7=7 بنابراین 7 و 12 12>11 تعویض می شود، قابل انتقال نیست، 11 11=11، بنابراین، 11 و 19 را مبادله کنید، قسمت مرتب شده 19>12 را به سمت راست منتقل کنید، زیرا 16>12، انتقال داده نمی شود، 12 12=12، بنابراین، 12 و 19 را مبادله کنید 19> 16 آرایه به ترتیب صعودی مرتب شده اند کمتر از مساوی 7 بزرگتر از 7 7 به سمت راست منتقل می شود، زیرا 16> 7 منتقل نمی شود، 47 به سمت راست منتقل می شود، زیرا 16> 7، 8> 7، 11> 7، 19> 7 منتقل نمی شود، 7 \u003d 7 شاعر " > 7 به سمت راست منتقل می شود، زیرا 16>7 منتقل نمی شود، 47 به سمت راست منتقل می شود، زیرا 16>7، 8>7،11>7، 19>7 منتقل نمی شود، 7=7 بنابراین ما swap 7 و 12 4>3 قسمت مرتب شده 12>11 به سمت راست منتقل می شود، زیرا 8 12 16>11 منتقل نمی شود، 811 به سمت راست منتقل می شود، زیرا 16>11، 12>11، منتقل نمی شود. ، 11 11=11 بنابراین 11 و 19 را با هم عوض می کنیم قسمت مرتب شده 19>12 به سمت راست منتقل می شود، زیرا 16>12 قابل حمل نیست، 12 12=12 بنابراین 12 و 19 را با هم عوض می کنیم 19>16 آرایه به ترتیب مرتب شده است. ترتیب صعودی کمتر برابر با 7 بیش از 7 "> 7 به سمت راست منتقل می کنیم، زیرا 16> 7 منتقل نمی شود، 47 به سمت راست منتقل می شود، زیرا 16> 7، 8> 7،11> 7، 19> 7 is not transferred, 7=7 poet" title="47 مرتب سازی سریع 812371911416 عنصر مانع 4378123 4 عنصر مانع 8121119 عنصر مانع 1219 1619 , زیرا 16>7, 8>7, 11>7 نیست, قابل حمل 7=7 شاعر"> title="47 مرتب سازی سریع 812371911416 عنصر مانع 4378123 4 عنصر مانع 8121119 عنصر مانع 1219 1619 8>7 به سمت راست منتقل می شود زیرا 16>7 قابل حمل نیست، 47 به سمت راست منتقل می شود زیرا 18>7، 18>7، 7، 19>7 قابل حمل نیست، 7=7 شاعر"> !}


    48 A n لازم است آرایه A را به ترتیب صعودی مرتب کنیم که در آن n عنصر روش سریعمتغیرهای کمکی: t – t – عنصر نهایی آرایه m – m – عنصر اولیه آرایه x – x – عنصری که تمام عناصر دیگر نسبت به آن حرکت می کنند. w - w - مقدار میانی مورد استفاده برای جابجایی عناصر آرایه
















    58 ثبات - یک آرایه مرتب شده ترتیب عناصر را تغییر نمی دهد همان مقادیر. ترتیب متقابل عناصر برابر با کلید 1 و فیلدهای اضافی "a"، "b"، "c" پارامترهای ارزیابی الگوریتم


    59 طبیعی بودن رفتار - اثربخشی روش هنگام پردازش داده های مرتب شده یا جزئی مرتب شده است. الگوریتم اگر این ویژگی توالی ورودی را در نظر بگیرد و کار کند، به طور طبیعی رفتار می کند پارامترهای بهترارزیابی الگوریتم


    60 ارزیابی الگوریتم مرتب سازی انتخاب تعداد کل مقایسه ها C =N-l + N = (N 2 -N)/2 تعداد کل عملیات n + (n-1) + (n-2) + (n-3) = 1/ 2 * ( n 2 +n) = تتا (n 2) تعداد مبادلات


    63 ارزیابی الگوریتم مرتب سازی درج آرایه به مقایسه N-1 نیاز دارد. یک آرایه به یک مقایسه (N 2 -N)/2 نیاز دارد. تعداد کل عملیات تتا (n 2)


    66 روش کارآمدی نیست، زیرا گنجاندن یک عنصر با جابجایی تمام عناصر قبلی در یک موقعیت همراه است و این عملیات غیراقتصادی است در مجموع، پایداری و رفتار طبیعی الگوریتم باعث می‌شود روش انجام شود. انتخاب خوبدر شرایط مناسب




    70 مقایسه روش‌های مرتب‌سازی ساده N N - تعداد عناصر، M M - تعداد انتقال‌ها، C - تعداد مقایسه‌ها حداقل حداکثر شامل ساده M=2(n-1) C = n-1 M=2(n-1) С= ( n 2 -n) / 2 M \u003d (n + 3n-4) / 2 M \u003d (n 2 + 3n-4) / 2 مبادله ساده C \u003d (n 2 -n) / 2M \u003d 3 ( n-1) C \u003d (n 2 -n) / 2 M \u003d n / 4 + 3 (n-1) M \u003d n 2 / 4 + 3 (n-1) انتخاب ساده C \u003d (n 2 -n) / 2 M \u003d 0 C \u003d (n 2 -n) / 2 M \u003d (n-n) * 1.5 M \u003d (n 2 -n) * 1.5؟ تعداد نقل و انتقالات چقدر خواهد بود




    72 امتیاز الگوریتم پوسته n 1.2 زمان اجرا متناسب با n 1.2 است، زیرا هر پاس از تعداد کمی از عناصر استفاده می کند یا عناصر آرایه از قبل به ترتیب نسبی هستند و ترتیب با هر نگاه جدید به داده ها افزایش می یابد.


    73 ارزیابی الگوریتم مرتب سازی سریع N=2g X N N/2N/2 اگر اندازه آرایه توان 2 باشد (N=2g)، و هر تقسیم X دقیقاً در وسط آرایه باشد، N مقایسه در اولین جستجو و آرایه انجام می‌شود. به دو قسمت N/2 تقسیم می شود. برای هر یک از این بخش ها، N/2 مقایسه و غیره وجود دارد. بنابراین C=N+2*(N/2)+4*(N/4)+...+N*(N/N). N اگر N توان دو نباشد، امتیاز به همان ترتیب خواهد بود


    74 تتا(n). تعداد کل عملیات تتا(n). log n O(n log n) اگر آرایه به قسمت های کم و بیش مساوی تقسیم شود، تعداد مراحل تقسیم (عمق بازگشت) تقریباً log n است. بنابراین، عملکرد کلی این است: O(n log n) O(n 2) اگر هر بار حداکثر یا حداقل دنباله ورودی به عنوان عنصر مرکزی انتخاب شود، عملکرد O(n2) است.






    77 کنترل سوالات? "مرتب سازی" چیست؟ ? روش مرتب سازی انتخاب چیست؟ ? روش مرتب سازی درج چیست؟ ? روش مرتب سازی حبابی چیست؟ ? روش مرتب سازی سریع چیست؟ ? روش مرتب سازی پوسته چیست؟


    78 سوال امنیتی؟ کدام الگوریتم مرتب سازی ساده ترین در نظر گرفته می شود؟ ? کارآمدترین الگوریتم مرتب سازی چیست؟ ? چند گروه از الگوریتم های مرتب سازی وجود دارد؟ ? ویژگی های الگوریتم های مرتب سازی چیست؟ ? هنگام انتخاب الگوریتم مرتب سازی چه مواردی را باید در نظر گرفت؟

    معرفی .

    حدود سه دهه و نیم از معرفی آن می گذرد رشته تحصیلیبرنامه نویسی کامپیوتر. با سرعت عظیم تغییرات در خود موضوع، که همیشه به طور قابل توجهی از سرعت مکانیسم های انتشار مرکزی فراتر می رفت، کتاب هایی که مخصوص برنامه های دانشگاه های آموزشی بودند بیش از یک بار در دهه منتشر نمی شدند - تقریباً متناسب با سرعت تغییر. از نسل های کامپیوتر امروزه قفسه کتابفروشی ها از انتشارات علوم کامپیوتر پر شده است. با این حال، معلم (و بیشتر از همه دانش آموز) به کتاب های آموزشی ویژه ای نیاز دارد که محتوا و جهت گیری آن با برنامه درسی و برنامه داده شده مطابقت داشته باشد. در حال حاضر، علاوه بر برنامه نویسی در برخی از تخصص ها، دانشگاه های علوم تربیتی دروس ویژه پیچیده تری دیگری را معرفی کرده اند که در تقاطع ریاضیات کاربردی (گسسته) و انفورماتیک قرار دارند.

    در این مقاله ترممی‌توانید با آرایه‌ها آشنا شوید و با روش‌های ساده و پیچیده مرتب‌سازی آن‌ها آشنا شوید و همچنین بدانید که کدام یک و در چه مواردی مؤثرتر هستند.

    1. مرتب سازی وظایف.

    1.1 مقررات عمومی.

    وظیفه اصلی نشان دادن روش های مختلف مرتب سازی و برجسته کردن مؤثرترین آنها است. مرتب سازی یک مثال نسبتا خوب از یک مسئله است که می توان آن را با بسیاری از الگوریتم های مختلف حل کرد. هر کدام از آنها مزایا و معایب خود را دارند و شما باید الگوریتمی را بر اساس یک بیان مسئله خاص انتخاب کنید.

    به طور کلی، مرتب‌سازی باید به عنوان فرآیند تنظیم مجدد یک مجموعه معین از اشیاء در یک ترتیب خاص درک شود. هدف از مرتب سازی تسهیل جستجوی بعدی برای عناصر در چنین مجموعه مرتب شده ای است. این تقریباً یک فعالیت جهانی و اساسی است. ما با اشیاء مرتب شده در دفترچه تلفن، لیست مالیات بر درآمد، عنوان کتاب، کتابخانه، فرهنگ لغت، انبارها مواجه می شویم - تقریباً در هر جایی که بخواهید به دنبال اشیاء ذخیره شده بگردید.

    بنابراین، صحبت در مورد مرتب سازی در مورد پردازش داده ها کاملاً مناسب و مهم است. علاقه اولیه به مرتب‌سازی بر این اساس استوار است که هنگام ساخت الگوریتم‌ها با ترفندهای بسیار اساسی زیادی مواجه می‌شویم. تقریباً هیچ روشی وجود ندارد که هنگام بحث در مورد این مشکل با آن مواجه نشوید. به طور خاص، مرتب‌سازی یک شی ایده‌آل برای نشان دادن طیف گسترده‌ای از الگوریتم‌ها است که همه برای یک مسئله اختراع شده‌اند، بسیاری از آنها به نوعی بهینه هستند، بیشتر آنها شایستگی‌های خاص خود را دارند. بنابراین، همچنین یک شی ایده آل است که نیاز به تجزیه و تحلیل عملکرد الگوریتم ها را نشان می دهد. علاوه بر این، با استفاده از مثال‌هایی از مرتب‌سازی، می‌توان نشان داد که چگونه با پیچیده کردن الگوریتم، اگرچه روش‌های واضحی در دست وجود دارد، می‌توان به سود قابل توجهی در کارایی دست یافت.

    انتخاب الگوریتم به ساختار داده های در حال پردازش بستگی دارد - این تقریباً یک قانون است، اما در مورد مرتب سازی، چنین وابستگی به قدری عمیق است که روش های مربوطه به دو کلاس تقسیم می شوند - مرتب سازی آرایه ها و مرتب سازی فایل ها (توالی ها) ). آنها گاهی اوقات به عنوان مرتب سازی داخلی و خارجی شناخته می شوند زیرا آرایه ها در یک سریع و زنده ذخیره می شوند. حافظه داخلیماشین‌هایی که دسترسی تصادفی دارند و فایل‌ها معمولاً در حافظه خارجی کندتر، اما ظرفیت بیشتری در دستگاه‌های مبتنی بر حرکات مکانیکی (دیسک یا نوار) ​​قرار دارند.

    قبل از ادامه، به معرفی چند مفهوم و نماد می پردازیم. اگر عناصر الف داشته باشیم، الف، ……، و سپس مرتب سازی جایگشت این عناصر در یک آرایه a است k, ak, …… , ak جایی که ak ak ak .

    ما فرض می کنیم که نوع عنصر به صورت تعریف شده استعدد صحیح.

    Constn =؟؟؟ //طول آرایه مورد نیاز در اینجا مشخص شده است

    VarA: آرایه عدد صحیح.

    انتخاب INTEGER تا حدودی خودسرانه امکان گرفتن بود

    نوع دیگری که بر روی آن یک رابطه نظم کلی تعریف شده است.

    اگر موقعیت نسبی عناصر با کلیدهای مساوی در طول فرآیند مرتب‌سازی تغییر نکند، روش مرتب‌سازی پایدار است. هنگامی که به عناصری که قبلاً توسط برخی از کلیدهای ثانویه (مثلاً خصوصیات) مرتب شده‌اند (مرتب‌سازی شده‌اند) که کلید اصلی را تحت تأثیر قرار نمی‌دهند، معمولاً پایداری مرتب‌سازی مطلوب است.

    1.2. بیان مسئله مرتب سازی آرایه ها.

    شرط اصلی: روش انتخاب شده برای مرتب سازی آرایه ها باید از نظر اقتصادی استفاده شود حافظه موجود. این فرض را بر این می‌گذارد که جایگشت‌هایی که عناصر را مرتب می‌کنند باید در یک مکان انجام شوند، یعنی روش‌هایی که در آن عناصر از آرایه a به آرایه حاصل منتقل می‌شوند.ب بسیار کمتر مورد توجه هستند. ابتدا روش‌ها را بر اساس اقتصادشان، یعنی بر اساس زمان اجرا، طبقه‌بندی می‌کنیم. یک معیار خوب برای کارایی خواهد بودسی تعداد مقایسات کلیدی مورد نیاز است وم تعداد جابجایی (جایگشت) عناصر است. این اعداد تابعی از n - تعداد عناصر مرتب شده در حالی که الگوریتم های مرتب سازی خوب نیاز به نظم دارند n* ورود در مقایسه، ابتدا به چند روش ساده و بدیهی نگاه می کنیم که به آنها مستقیم گفته می شود، جایی که به ترتیب نیاز است n 2 مقایسه کلیدی تجزیه را با روش های مستقیم بدون دست زدن شروع کنید الگوریتم های سریع، ما به دلایلی مجبوریم:

      روش های مستقیم به ویژه برای توضیح ویژگی های اصول اساسی اکثر انواع مفید هستند.

      برنامه های این روش ها آسان و کوتاه هستند.

      روش های پیچیده به تعداد زیادی عملیات و در نتیجه به اندازه کافی کوچک نیاز دارند n روش های مستقیم سریعتر هستند، هرچند برای بزرگ n البته نباید از آنها استفاده کرد.

    روش های مرتب سازی در یک مکان را می توان با توجه به اصولی که آنها را تعریف می کند به سه دسته اصلی تقسیم کرد:

      مرتب سازی بر اساس شامل (با درج).

      مرتب سازی بر اساس انتخاب (با انتخاب).

      مرتب سازی با استفاده از مبادلات (مبادله ای).

    اکنون به بررسی این اصول و مقایسه آنها می پردازیم. همه برنامه ها بر روی یک آرایه a کار می کنند.

    Constn=

    الف: آرایه اعداد صحیح؛

    2. روش های مرتب سازی آرایه ها.

    2.1. روش های ساده برای مرتب سازی آرایه ها

    2.1.1. مرتب سازی با استفاده از گنجاندن مستقیم

    این روش به طور گسترده در هنگام بازی با ورق استفاده می شود. عناصر از نظر ذهنی به یک دنباله از قبل "آماده" تقسیم می شوند a، … ، آ و دنباله اصلی در هر مرحله شروع از I = 2 و افزایش i هر بار یکی، از دنباله اصلی استخراج می شودمن - عناصر و به دنباله تمام شده منتقل می شود، در حالی که در جای مناسب درج شده است.

    برنامه 2.1. مرتب سازی با گنجاندن مستقیم.

    I,J,N,X:INTEGER;

    الف: آرایه عدد صحیح؛

    نوشته شده است ('طول آرایه را وارد کنید');

    READ(N);

    WRITELN('Array Enter');

    FOR I:=1 TO N DO READ(A[I]);

    FOR I:=2 TO N DO

    WRITELN("نتیجه:");

    پایان.

    چنین مورد معمولی از یک فرآیند تکراری با دو شرط

    پایان دادن به ما اجازه می دهد از ترفند معروف استفاده کنیم

    «موانع» (نگهبان).

    تجزیه و تحلیل روش گنجاندن مستقیم. تعداد مقایسه های کلیدی ( Ci) برای i - m الک کردن حداکثر برابر است بامن -1، حداقل - 1؛ با فرض اینکه همه جایگشت ها از n کلیدها به همان اندازه محتمل هستند، پس میانگین تعداد مقایسه ها استمن /2. تعداد نقل و انتقالات Mi برابر با Ci است + 2 (از جمله مانع). بنابراین، تعداد کل مقایسه ها و تعداد نقل و انتقالات عبارتند از:

    Cmin = n-1 (2.1.) Mmin = 3*(n-1) (2.4.)

    Cave = (n2+n-2)/4 (2.2.) Mave = (n2+9*n-10)/4 (2.5.)

    Cmax = (n2+n-4)/4 (2.3.) Mmax = (n2+3* n-4)/2 (2.6.)

    اگر به این واقعیت توجه کنید که دنباله تمام شده ای که می خواهید یک عنصر جدید را در آن وارد کنید، خود از قبل سفارش داده شده است، الگوریتم با گنجاندن مستقیم به راحتی قابل بهبود است. طبیعی است که در جستجوی دودویی توقف کنیم، که در آن سعی می شود با وسط دنباله تمام شده مقایسه شود و سپس روند تقسیم به نصف تا یافتن نقطه گنجاندن ادامه می یابد. چنین الگوریتم مرتب سازی اصلاح شده ای روش گنجاندن باینری نامیده می شود (درج باینری).

    برنامه 2.2. مرتب سازی بر اساس روش تقسیم نصف.

    I,J,M,L,R,X,N:INTEGER;

    الف: آرایه عدد صحیح؛

    WRITELN ("وارد آرایه");

    FOR I:=1 TO N DO READ(A[I]);

    FOR I:=2 TO N DO

    X:=A[I];L:=1;R:=I;

    برای J:=I DOWNTO R+1 A[J]:=A;

    WRITELN("نتیجه:");

    FOR I:=1 TO N DO WRITE(A[I]," ")

    پایان.

    تجزیه و تحلیل گنجاندن باینری. نقطه سوئیچ پیدا می شود اگر L= R . بنابراین، در پایان جستجو، فاصله باید به طول یک باشد. یعنی به نصف تقسیم می شود I* LogI یک بار. بدین ترتیب:

    C = Si: 1i n: [logI] (2.7.)

    ما این مجموع را با انتگرال تقریب می کنیم

    انتگرال (1:n) log x dx = n*(log n - C) + C (2.8.)

    جایی که C = loge = 1 / ln 2 = 1.4426… . (2.9.)

    2.1.2 مرتب سازی با انتخاب مستقیم.

    این رویکرد مبتنی بر اصول زیر است:

      عنصر با کوچکترین کلید انتخاب شده است.

      مکان را با عنصر اول a1 عوض می کند.

      سپس این روند با بقیه تکرار می شود n-1 عناصر، n -2 عنصر و غیره تا زمانی که تنها یک، بزرگترین عنصر باقی بماند.

    برنامه 2.3. مرتب سازی با انتخاب مستقیم.

    I,J,R,X,N:INTEGER;

    الف: آرایه عدد صحیح؛

    WRITELN("طول آرایه را وارد کنید");

    WRITELN ("وارد آرایه");

    FOR I:=1 TO N DO READ(A[I]);

    برای I:=1 تا N-1 انجام دهید

    برای J:=I+1 TO N DO IF A[J]

    WRITELN("نتیجه:");

    FOR I:=1 TO N DO WRITE(A[I]," ")

    پایان.

    تحلیل انتخاب مستقیم تعداد مقایسه کلیدها (C) بدیهی است که به ترتیب اولیه کلیدها بستگی ندارد. برای C داریم C = (n2 - n)/2 (2.10.).

    تعداد جایگشت ها حداقل است: Mmin = 3*(n-1) (2.11.).

    در مورد کلیدهای سفارش اولیه و حداکثر Mmax = n2/4 + 3*(n-1) (2.12.)

    ما میانگین M را تعریف می کنیم . برای اندازه کافی بزرگ n می‌توانیم مولفه‌های کسری را نادیده بگیریم و بنابراین میانگین تعداد تخصیص‌ها را بر اساس تقریبی تقریبی کنیممن -m عبارت جستجو Fi = lni + g + 1 (2.13.)، که در آن g = 0.577216… - ثابت اویلر.

    میانگین نقل و انتقالات Mavg مرتب سازی انتخاب دارای مجموع است Fi با i از 1 تا n

    Mavg = n*(g + 1) + (Si: 1

    دوباره تقریب این مجموع اصطلاحات گسسته توسط انتگرال

    انتگرال (1:n) ln x dx = x*(ln x - 1) = n*ln (n) - n + 1 (2.15.)

    بدست آوردن یک مقدار تقریبی

    Mavg = n*(ln (n) + g) . (2.16.)

    2.1.3. مرتب سازی با تبادل مستقیم .

    همانطور که در روش انتخاب مستقیم، ما از طریق آرایه تکرار می کنیم، هر بار کوچکترین عنصر دنباله باقی مانده را به سمت چپ آرایه منتقل می کنیم. اگر ساختارهای عمودی را به جای افقی در نظر بگیریم، آنگاه عناصر را می‌توان به صورت حباب‌هایی در یک خمره آب تعبیر کرد که وزن هر یک با کلید آن مطابقت دارد.

    برنامه 2.4. مرتب سازی حباب.

    برنامه ها؛

    I,J,X,N:INTEGER;

    الف: آرایه عدد صحیح؛

    WRITELN("طول آرایه را وارد کنید");

    WRITELN ("وارد آرایه");

    FOR I:=1 TO N DO READ(A[I]);

    FOR I:=2 TO N DO

    FOR J:=N DOWNTO I DO

    اگر A>A[J] سپس

    WRITELN("نتیجه:");

    FOR I:=1 TO N DO

    پایان.

    بهبودهای این الگوریتم خود را نشان می دهد:

      به یاد داشته باشید که آیا جایگشت هایی در این فرآیند وجود داشته است یا خیر

    چند گذر

      نه تنها این واقعیت را به یاد داشته باشید که مبادله صورت گرفت، بلکه همچنین

    موقعیت (شاخص) آخرین صرافی.

      جهت نماهای متوالی را جایگزین کنید.

    الگوریتم حاصل را مرتب‌سازی «شکر» می‌نامیم ( ShakerSoft).

    تجزیه و تحلیل انواع حبابی و تکان دهنده. تعداد مقایسه ها در الگوریتم مبادله دقیق C = (n2 - n )/2، (2.17.)، در حالی که حداقل، متوسط ​​و حداکثر تعداد جابجایی های عنصر (تخصیص) به ترتیب، M = 0، Mavg = 3*(n2 – n)/2، Mmax = 3*(n2 – n)/4 (2.18.)

    تجزیه و تحلیل روش های بهبود یافته، به ویژه مرتب سازی شیکر، نسبتاً پیچیده است. حداقل تعداد مقایسه Cmin = n - 1. Knuth معتقد است که مرتب سازی حبابی بهبود یافته میانگین تعداد پاس ها متناسب است n – k1 n 1/2، و میانگین تعداد مقایسه ها متناسب با ½ ( n2 – n(k2 + lnn)).

    برنامه 2.5. مرتب سازی شیکر.

    برنامه ها؛

    J,L,K,R,X,N,I:INTEGER;

    الف: آرایه عدد صحیح؛

    WRITELN("طول آرایه را وارد کنید");

    WRITELN ("وارد آرایه");

    FOR I:=1 TO N DO

    برای J: = R DOWNTO L DO

    اگر A>A[J] سپس

    برای J:=L TO R DO

    اگر A>A[J] سپس

    WRITELN("نتیجه:");

    FOR I:=1 TO N DO

    پایان.

    در واقع هیچ چیز ارزشمندی در مورد مرتب سازی حبابی به جز نام جذاب آن وجود ندارد. مرتب سازی شاکر به طور گسترده ای در مواردی استفاده می شود که مشخص است عناصر تقریباً سفارش داده شده اند - در عمل این بسیار نادر است.

    2.2. روش های مرتب سازی آرایه بهبود یافته است.

    2.2.1 روش پوسته.

    در سال 1959، D. Shell یک بهبود در مرتب سازی با استفاده از گنجاندن مستقیم پیشنهاد کرد. ابتدا عناصری که با فاصله 4 از هم جدا شده اند به طور جداگانه مرتب شده و گروه بندی می شوند که به این فرآیند مرتب سازی چهارگانه می گویند. در مثال ما، هشت عنصر وجود دارد و هر گروه از دو عنصر تشکیل شده است. پس از اولین پاس، عناصر دوباره گروه بندی می شوند - اکنون هر عنصر گروه دو موقعیت از دیگری فاصله دارد - و دوباره مرتب می شوند. به این کار مرتب سازی دوگانه می گویند. رویکرد سوم مرتب سازی معمول یا تک است. در هر مرحله، یا عناصر نسبتا کمی مرتب شده اند، یا عناصر در حال حاضر به خوبی مرتب شده اند و به جایگشت های نسبتا کمی نیاز دارند.

    برنامه 2.6. پوسته مرتب سازی..

    پوسته های برنامه;

    H: آرایه صحیح = (15،7،3،1);

    I,J,K,S,X,N,M:INTEGER;

    A:ARRAY[-16..50] OF INTEGER;

    WRITELN("طول آرایه را وارد کنید");

    WRITELN ("وارد آرایه");

    FOR I:=1 TO N DO

    برای M: = 1 TO DO

    FOR I:=K+1 TO N DO

    اگر S=0، S:=-K;

    WRITELN("نتیجه:");

    FOR I:=1 TO N DO

    تجزیه و تحلیل مرتب سازی پوسته ما نمی دانیم فاصله ها چه می دهد بهترین نتیجه. اما آنها نباید مضرب یکدیگر باشند. قضیه زیر درست است: اگرک - توالی مرتب شده استمن -مرتب، بعد می ماندک -مرتب شده کنوت نشان می دهد که منطقی است که از دنباله ای استفاده کنیم که در آن hk-1 = 3 hk + 1، ht = 1 و t = [log2 n] - 1. (2.19.)

    2.2.2 مرتب سازی با درخت .

    روش مرتب سازی انتخاب مستقیم بر اساس جستجوهای مکرر برای کوچکترین کلید در میان است n عناصر، در میان n -1 عنصر باقی مانده و غیره چگونه می توانیم روش مرتب سازی ذکر شده را بهبود ببخشیم؟ این را می توان با عمل به آن دست یافت مراحل بعدیمرتب سازی:

    1. پس از هر پاس، اطلاعات بیشتری به جای شناسایی یک عنصر حداقلی بگذارید. انجام دادن n با مقایسه -1، می توانیم یک درخت انتخاب مانند آنچه در شکل 2.1 نشان داده شده است بسازیم.

    44 12 18 06

    44 55 12 42 94 18 06 67

    شکل 2.1. انتخاب مکرر از میان دو کلید.

    2. پایین آمدن در امتداد مسیر مشخص شده توسط کوچکترین عنصر و حذف آن از درخت با جایگزینی با یک عنصر خالی در پایین، یا با عنصری از شاخه همسایه در رئوس میانی (شکل های 2.2 و 2.3. را ببینید).

    دی ویلیامز این روش را ابداع کرددسته بندی ، که در آن پیشرفت قابل توجهی در گونه های سنتی با استفاده از درختان حاصل شد. هرم به عنوان دنباله ای از کلیدها تعریف می شود a[ L]، a[ L+1]، …، a[R]، به طوری که a[i] a و a[i] a برای i= L… R/2.

    R. Floyd یک روش "لاکونیک" خاص برای ساختن یک هرم در "همان مکان" پیشنهاد کرد. اینجا a … a[ n ] یک آرایه است و a[ m]… a[n] (m = [ nDIV 2] + 1) در حال حاضر یک هرم را تشکیل می دهند، زیرا شاخص هامن و ج ، ارضای رابطه j = 2 i (یا j = 2 i + 1) به سادگی وجود ندارد.

    44 12 18

    44 55 12 42 94 18 67

    شکل 2.2 انتخاب کوچکترین کلید.

    12 18

    44 12 18 67

    44 55 12 42 94 18 67

    شکل 2.3. پر کردن سوراخ ها

    این عناصر، همانطور که بود، لایه پایین درخت دودویی مربوطه را تشکیل می دهند (شکل 2.4 را ببینید)، هیچ ترتیبی برای آنها لازم نیست. اکنون هرم در حال گسترش به سمت چپ است. هر بار که یک عنصر جدید اضافه می شود و به موقعیت مناسب منتقل می شود. هرم حاصل در شکل 2.4 نشان داده شده است.

    شکل 2.4 آرایه به صورت یک درخت دودویی ارائه شده است.

    برنامه 2.7. HEARSORT.

    I,X,L,N,R:INTEGER;

    الف: آرایه عدد صحیح؛

    SIFT رویه (L,R: INTEGER)؛

    WRITELN("طول آرایه را وارد کنید");

    WRITELN ("وارد آرایه");

    FOR I:=1 TO N DO

    WRITELN('نتیجه:");

    FOR I:=1 TO N DO

    پایان.

    تجزیه و تحلیل مرتب سازی پشته دسته بندی برای تعداد زیادی از عناصر بسیار موثر است n بیشتر n بهتر کار می کند

    در بدترین حالت، شما نیاز دارید n /2 گام جابجایی، آنها عناصر را با جابجا می کنند log(n/2)، log(n/2 – 1)، … , log(n – 1) موقعیت ها (لگاریتم در [پایه 2] به عدد صحیح کوچکتر بعدی «قطع» شده است). از این رو مرحله مرتب سازی خواهد بود n - 1 تغییر از بزرگترین log(n-1)، log(n -2)، ...، 1 حرکت. می توان نتیجه گرفت که حتی در بدترین حالت ممکن Heapsort به n* logn نیاز دارد مراحل عملکرد عالی در چنین مواردی یکی از ویژگی های جذاب استدسته بندی

    2.2.3. مرتب سازی با استفاده از پارتیشن بندی .

    این روش مرتب‌سازی بهبود یافته مبتنی بر مبادله است. این شناخته شده ترین است این لحظهروش های مرتب سازی آرایه عملکرد آن به قدری چشمگیر است که مخترع C. Hoare این روش را Quicksort نامید.مرتب سازی سریع). در Quicksort از این فرض که برای دستیابی به بهترین کاراییابتدا بهتر است جایگشت هایی در آن ایجاد شود مسافت های طولانی. فرض کنید داریم n عناصر مرتب شده توسط کلیدها به ترتیب معکوس. آنها را می توان مرتب کرد n /2 را مبادله کنید، ابتدا سمت چپ را با سمت راست عوض کنید و سپس به ترتیب از دو طرف جابجا شوید. این زمانی ممکن است که بدانیم ترتیب واقعاً معکوس شده است. با این حال، الگوریتم به دست آمده از این طریق ممکن است ناموفق باشد، که به عنوان مثال، در مورد n کلیدهای یکسان: برای جدا کردن نیاز دارید n /2 مبادله. این مبادلات اختیاری را می توان با جایگزین کردن عبارات جستجو با:

    در این مورد x به عنوان مانعی برای دو نما کار نمی کند. در نتیجه، جستجوی آرایه با همه کلیدهای یکسان منجر به پرش مرزهای آرایه می شود.

    هدف ما نه تنها تقسیم آرایه اصلی عناصر به قطعات، بلکه مرتب سازی آن است. ما فرآیند جداسازی را روی دو قسمت به‌دست‌آمده اعمال می‌کنیم، تا زمانی که هر یک از قسمت‌ها از یک عنصر تشکیل نشده باشد. این اقدامات در برنامه 2.8 توضیح داده شده است.

    برنامه 2.8. مرتب سازی سریع.

    الف: آرایه عدد صحیح؛

    PROCEDURE SORT(L,R:INTEGER);

    I,J,X,W:INTEGER;

    X:=A[(L+R) DIV 2];

    WRITELN("طول آرایه را وارد کنید");

    WRITELN ("وارد آرایه");

    FOR I:=1 TO N DO READ(A[I]);

    WRITELN("نتیجه:");

    FOR I:=1 TO N DO

    پایان.

    تجزیه و تحلیل مرتب سازی سریع . فرآیند جداسازی به صورت زیر پیش می رود: انتخاب مقداری مرزیایکس ، سپس کل آرایه را حلقه می کنیم. در عین حال دقیقا n مقایسه ها تعداد مورد انتظار مبادلات، میانگین این مقادیر مورد انتظار برای تمام مرزهای ممکن استایکس.

    N*(n-1)/2n-(2n2-3n+1)/6n = (n-1/n)/6 (2.20.)

    در صورتی که همیشه بتوانیم میانه را به عنوان مرز انتخاب کنیم، هر فرآیند پارتیشن بندی آرایه را به دو نیمه تقسیم می کند و مرتب سازی فقط به n* ورود نزدیک می شود. در نتیجه، تعداد کل مقایسه ها برابر خواهد بود n* ورود ، و تعداد کل مبادلات است n*log(n ) /6. اما احتمال این فقط 1/ n

    عیب اصلیمرتب سازی سریع - کافی نیست عملکرد بالابا کوچک n اگرچه تمام روش های پیشرفته در این مورد مقصر هستند، اما یکی از مزیت های آن این است که برای پردازش قطعات کوچک می توان یکی از روش های مرتب سازی مستقیم را به راحتی در آن گنجاند.

    تست ها .

      ایده پشت مرتب سازی یک آرایه با گنجاندن مستقیم این است

      1. در دنباله مرتب شده masi به طول n (i = 0..n - 1)، عناصر به ترتیب از دومین (i) انتخاب می شوند.

        در دنباله مرتب شده masi به طول n (i=0..n-1)، عناصر به ترتیب از اولین (i) انتخاب می شوند.

        در دنباله مرتب شده masi به طول n (i=0..n-1)، عناصر به ترتیب از دومین (i) انتخاب می شوند.

        در دنباله مرتب شده masi به طول n-1 (i=0..n-1)، عناصر به ترتیب از دومین (i) انتخاب می شوند.

      هنگام مرتب‌سازی یک آرایه با گنجاندن مستقیم، جستجو برای نقطه درج عنصر بعدی x در سمت چپ دنباله mas می‌تواند در دو موقعیت به پایان برسد:

      1. عنصری از توالی mas یافت شد که برای آن masi>x; انتهای سمت چپ دنباله مرتب شده به چپ رسیده است.

        عنصر توالی mas را یافت که برای آن masi

        عنصر توالی mas را یافت که برای آن masi

      هنگام مرتب‌سازی یک آرایه با گنجاندن مستقیم، از تکنیک "موانع" برای ردیابی وضعیت پایانی اسکن سمت چپ دنباله مرتب‌شده استفاده می‌شود. ماهیت آن این است

      1. یک عنصر ساختگی X به دنباله اصلی در سمت راست اضافه می شود. در ابتدای هر مرحله از مرور به سمت چپ قسمت مرتب شده آرایه، عنصر X به مقدار عنصری که نقطه درج برای آن تعیین می شود، تنظیم می شود. جستجو شود.

        یک عنصر ساختگی X به دنباله اصلی در سمت چپ اضافه می شود. در پایان هر مرحله از اسکن سمت چپ قسمت مرتب شده آرایه، عنصر X به مقدار عنصری که نقطه درج برای آن خواهد بود تنظیم می شود. جستجو کرد.

        یک عنصر ساختگی X به دنباله اصلی در سمت چپ اضافه می شود. در ابتدای هر مرحله از اسکن سمت چپ قسمت مرتب شده آرایه، عنصر X به مقدار عنصری تنظیم می شود که هیچ نقطه درج برای آن جستجو نمی شود. .

        یک عنصر ساختگی X به دنباله اصلی در سمت چپ اضافه می شود. در ابتدای هر مرحله از اسکن سمت چپ قسمت مرتب شده آرایه، عنصر X به مقدار عنصری که نقطه درج برای آن خواهد بود تنظیم می شود. جستجو کرد.

      مرتب سازی یک آرایه با گنجاندن مستقیم به طور متوسط ​​نیاز دارد

      1. N^2/2 حرکت می کند.

        N^2/4 حرکت می کند.

        N^2 حرکت می کند.

        N/4 حرکت می کند.

      به جای علامت سوال در قطعه کد برای مرتب‌سازی آرایه با گنجاندن مستقیم، گزینه صحیح را برای درج آن انتخاب کنید:

    برای i:=2 تا C تعداد انجام دهید

    شروع

    Tmp: = Arr[من]؛

    j:=i-1;

    شروع

    Arr:=Arr[j];

    j:=j-1;

    پایان;

    Arr:=tmp;

    پایان;

        در حالی که (j0) و (Arr[j] ) انجام می دهند

        در حالی که (j>0) و (Arr[j]>Tmp) انجام می دهند

        در حالی که (j>0 ) و (Arr[ j] ) انجام دادن

        در حالی که (j=0) و (Arr[j]=Tmp) انجام می دهند

      الگوریتم مرتب سازی آرایه بر اساس ادخال های باینری

      1. درج می کندمن - هفتم عنصر را به دنباله تمام شده، که هنوز مرتب نشده است، برای پیدا کردن مکانی برایمن - هفتم

        درج می کند من - هفتم من - هفتم عنصر، از روش جستجوی باینری عنصر استفاده می شود.

        درج می کندمن - هفتم عنصر را به دنباله تمام شده، که قبلا مرتب شده است، برای پیدا کردن مکانی برایمن - هفتم

        درج می کندمن - هفتم عنصر را در یک دنباله آماده در حال حاضر که هنوز مرتب نشده است، برای پیدا کردن مکانی برایمن - هفتم عنصر، از متد Shell برای یافتن عنصر استفاده کنید.

      هنگام مرتب سازی یک آرایه بر اساس اجزاء باینری کل تولید خواهد شد

      1. N ورود به سیستم 2 ن مقایسه ها

        ورود به سیستم 2 ن مقایسه ها

        ورود به سیستم 2 (N/ 2 ) مقایسه ها

        ن /2*log 2 ن مقایسه ها

      آیا تعداد انتقال ها در مرتب سازی یک آرایه بر اساس گنجاندن باینری با توجه به تعداد مقایسه ها تغییر می کند؟

      1. بیشتر می شود

        کمتر خواهد شد

        تغییر نخواهد کرد.

      هنگام مرتب‌سازی یک آرایه با استفاده از روش گنجاندن باینری، حلقه جستجوی داخلی با یک جابجایی همزمان باید تقسیم شود:

      1. جستجوی باینری موقعیت درج را پیدا می کند، سپس تمام عناصر دنباله تمام شده واقع در سمت چپ این موقعیت به سمت راست منتقل می شوند.

        جستجوی باینری موقعیت درج را پیدا می کند، سپس تمام عناصر دنباله تمام شده واقع در سمت راست این موقعیت به سمت چپ منتقل می شوند.

        جستجوی باینری موقعیت درج را پیدا می کند، سپس تمام عناصر دنباله تمام شده واقع در سمت راست این موقعیت به سمت راست منتقل می شوند.

        جستجوی باینری موقعیت درج را پیدا می کند، سپس تمام عناصر دنباله تمام شده واقع در سمت چپ این موقعیت به سمت چپ منتقل می شوند.

      ایده مرتب‌سازی آرایه با استفاده از روش Shell چیست؟

      1. همه عناصر متوالی دنباله مرتب نمی شوند، بلکه فقط آنهایی که در فاصله معینی بیشتر از h از یکدیگر جدا شده اند.

        همه عناصر متوالی دنباله مرتب نمی شوند، بلکه فقط آنهایی که در فاصله معینی کمتر از h از یکدیگر جدا شده اند.

        همه عناصر متوالی دنباله مرتب نمی شوند، بلکه فقط آنهایی که در فاصله معینی h از یکدیگر جدا شده اند.

        همه عناصر متوالی دنباله مرتب نمی شوند، بلکه فقط عناصر h مرتب می شوند.

      هنگام مرتب سازی آرایه با استفاده از روش Shell، در هر مرحله، مقدار h تغییر می کند تا زمانی که (لزوم) برابر شود

    1. اگر h=1 باشد، آنگاه الگوریتم مرتب‌سازی آرایه با روش Shell به انحطاط می‌رسد

      1. مرتب سازی پشته

        مرتب سازی بر اساس اجزاء مستقیم

        مرتب سازی ادغام

        مرتب سازی گنجاندن باینری

    2. هنگام مرتب سازی یک آرایه با استفاده از روش Shell، فاصله بین عناصر مقایسه شده می تواند به روش های مختلف تغییر کند. فقط لازم است که

      1. آخرین مرحله باید برابر با یک باشد.

        آخرین مرحله باید صفر باشد.

        عنصر اول برابر با آخرین عنصر است.

        عنصر اول برابر با عنصر ماقبل آخر است.

      کارایی مرتب سازی یک آرایه با روش شل با این واقعیت توضیح داده می شود که

      1. هر پاس از تعداد بسیار زیادی از عناصر استفاده می کند، ترتیب با هر نگاه جدید به داده ها افزایش می یابد.

        در هر پاس، عناصر آرایه مرتب نمی شوند و با هر نگاه جدید به داده ها، ترتیب افزایش می یابد.

        هر پاس از تعداد نسبتاً کمی از عناصر استفاده می کند، یا عناصر آرایه قبلاً به ترتیب نسبی هستند و هر بار که داده ها اسکن می شوند ترتیب افزایش می یابد.

      ایده پشت الگوریتم مرتب سازی انتخاب مستقیم این است که

      1. در هر مرحله، مرتب نشده است قسمت راستآرایه. عنصر حداکثر بعدی را جستجو می کند. اگر پیدا شد، به محل چپ ترین عنصر سمت راست مرتب نشده آرایه منتقل می شود.

        در هر مرحله، سمت راست مرتب نشده آرایه اسکن می شود. عنصر حداقل بعدی را جستجو می کند. اگر پیدا نشد، به محل چپ ترین عنصر سمت راست مرتب نشده آرایه منتقل می شود.

        در هر مرحله، سمت راست مرتب نشده آرایه اسکن می شود. عنصر حداقل بعدی را جستجو می کند. اگر پیدا شد، به محل سمت راست ترین عنصر سمت چپ مرتب نشده آرایه منتقل می شود.

        در هر مرحله، سمت راست مرتب نشده آرایه اسکن می شود. عنصر حداقل بعدی را جستجو می کند. اگر پیدا شد، به محل چپ ترین عنصر سمت راست مرتب نشده آرایه منتقل می شود.

      اگر مرتب سازی انتخابی روی آرایه "bdac" اعمال شود، پاس های زیر به دست می آیند

      1. اولین گذر:ج دسی بیآ ; پاس دوم: a b b c; پاس سوم: a b c d.

        دج پاس سوم: a b c d.

        پاس اول: a d b c; پاس دوم: الفسی دی بی ; پاس سوم: a b c d.

        پاس اول: a d b c; پاس دوم: الف بد ج پاس سوم:د قبل از میلاد مسیحآ .

      همانطور که در مرتب سازی یک آرایه با روش حباب در مرتب سازی یک آرایه با انتخاب مستقیم، حلقه بیرونی

      1. n بار اجرا می شود و حلقه داخلی n/2 بار اجرا می شود.

        n-1 بار اجرا می شود و حلقه داخلی n بار اجرا می شود.

        n-1 بار اجرا می شود و حلقه داخلی n/2 بار اجرا می شود.

        n بار اجرا می شود و حلقه داخلی n بار اجرا می شود.

      به جای علامت سوال، نابرابری صحیح را در قطعه کد برای مرتب سازی آرایه با انتخاب مستقیم وارد کنید:

    برای i:= 1 تا n - 1 do

    شروع

    min:=i;

    برای j:= i + 1 تا n انجام دهید

    اگر? سپس

    min:= j;

    t:= a[i];

    a[i] := a;

    a := t

    پایان؛

        a > a[j].

      1. آ [ دقیقه ] آ [ j ].

      هنگام مرتب سازی آرایه با انتخاب مستقیم در بهترین مورد(زمانی که آرایه اصلی از قبل سفارش داده شده باشد) فقط ? باید تعویض شود و هر عملیات تعویض به سه عملیات انتقال نیاز دارد.

    پاسخ صحیح را برای علامت سوال درج کنید.

        عناصر n

        (n-1) -عناصر.

        n/2-عناصر.

        2*n-عناصر.

      الگوریتم مرتب‌سازی آرایه با استفاده از روش انتخاب هرمی برای مرتب‌سازی دنباله‌ای از اعداد طراحی شده است.

      1. نمایشی به یاد یک درخت از یک ساختار خاص - یک هرم است.

        یک نقشه حافظه از یک درخت از یک ساختار خاص - یک درخت است.

        انعکاسی در خاطره هرم یک ساختار خاص - هرم است.

        نقشه برداری در حافظه کندو از یک ساختار خاص - یک درخت است.

      شکل چندین درخت را نشان می دهد که تنها یکی از آنهاست یک هرم است

        T4.

      هرم نشان داده شده در شکل (یکی از چهار) در حافظه با آرایه زیر نشان داده می شود:

        3, 2, 7, 11, 5, 8, 14, 9, 27.

        2, 3, 5, 7, 8, 9, 11, 14, 27.

        27, 14, 11, 9, 8, 7, 5, 3, 2.

        27, 9, 14, 8, 5, 11, 7, 2, 3.

      در هر یک از n مرحله مورد نیاز برای مرتب سازی یک آرایه با انتخاب پشته، باید

      1. n *log n مقایسه (دودویی).

        (log n)/2مقایسه (دودویی)

        log n (دودویی) مقایسه.

        2 *log n (دودویی) مقایسه.

      ایده پشت الگوریتم مرتب سازی آرایه با تبادل مستقیم این است

      1. اگر شماره موقعیت عنصر بزرگتر از عدد موقعیت عنصر کوچکتر است، آنها را عوض کنید.

        اگر شماره موقعیت عنصر کوچکتر از عدد موقعیت عنصر بزرگتر است، آنها را تعویض نکنید.

        اگر شماره موقعیت عنصر کوچکتر از عدد موقعیت عنصر بزرگتر باشد، آنها را در جای خود رها می کنیم.

        اگر شماره موقعیت عنصر کوچکتر از عدد موقعیت عنصر بزرگتر باشد، آنها را با هم عوض می کنیم.

      هنگام استفاده از روش مرتب سازی حباب آرایه، حداکثر طول می کشد

      1. n پاس می دهد.

        (n-1) می گذرد.

        n/2 پاس

        2*n معابر

      هنگام مرتب‌سازی آرایه با استفاده از تبادل مستقیم یا مرتب‌سازی حبابی، پس از هر عبور از جدول، می‌توان بررسی کرد که آیا جایگشت‌ها در طول این عبور انجام شده‌اند یا خیر. اگر جایگشتی وجود نداشت، پس این بدان معنی است

      1. جدول مرتب نشده است و نیاز به پاس های بیشتری دارد.

        جدول از قبل مرتب شده است و به پاس های بیشتری نیاز دارد.

        جدول قبلا مرتب شده است و نیازی به گذراندن بیشتر نیست.

        جدول مرتب نشده است و نیازی به پاس بیشتر نیست.

      مرتب کردن یک آرایه با استفاده از روش حباب یک ویژگی دارد: عنصری که در مکان اشتباهی در انتهای آرایه قرار دارد.

      1. در یک گذر به جای خود می رسد.

        در دو پاس به جای خود می رسد.

        در سه پاس به جایگاه خود می رسد.

        به جای خود می رسدن معابر

      مرتب سازی یک آرایه با روش حباب یک ویژگی دارد: عنصری که در ابتدای آرایه قرار دارد

      1. خیلی سریع به جای خود می رسد

        خیلی آرام به جای خود می رسد

        به جای خود نمی رسد

        به وسط آرایه می رسد.

      روش مرتب سازی آرایه داخلی بر اساس رویه ادغام است

      1. دو میز سفارش داده شده

        یک میز سفارش داده شده

        سه میز سفارش داده شده

        دو میز نامرتب

      ماهیت مرتب سازی آرایه بر اساس ادغام این است که جدول مرتب شده به گروه های مساوی از عناصر تقسیم می شود. گروه ها مرتب می شوند و سپس

      1. به صورت جفت ادغام می شوند و سه گروه جدید را تشکیل می دهند که حاوی سه برابر بیشتر عناصر هستند.

        به صورت جفت ادغام می شوند و دو گروه جدید را تشکیل می دهند که حاوی دو برابر بیشتر عناصر هستند.

        به صورت جفت ادغام می شوند و گروه های جدیدی را تشکیل می دهند که حاوی سه برابر بیشتر عناصر هستند.

        به صورت جفت ادغام می شوند و گروه های جدیدی را تشکیل می دهند که حاوی دو برابر بیشتر عناصر هستند.

    در تست های پیشنهادی، پاسخ های صحیح با حروف مورب می باشد.

    نتیجه .

    این کار درسی مشکل مرتب سازی، تنظیم مشکل مرتب سازی آرایه ها را در نظر می گیرد. و همچنین بخش اصلی به در نظر گرفتن روش ها اختصاص دارد: یعنی روش های مرتب سازی ساده (مرتب سازی با استفاده از گنجاندن مستقیم، مرتب سازی با استفاده از انتخاب مستقیم، مرتب سازی با استفاده از تبادل مستقیم) و روش های پیشرفته برای مرتب سازی آرایه ها (روش پوسته، مرتب سازی با استفاده از درخت، مرتب سازی با استفاده از جدایش، جدایی). تجزیه و تحلیل برای هر یک از روش های مرتب سازی آرایه پیشنهاد شده است. وظایف آزمایشی برای مرتب سازی آرایه ها (30 کار) توسعه یافته است.http://en.wikipedia.org

    MOU SOSH S. REEDS

    کار خلاقانه

    روش های مرتب سازی داده ها

    در دوره OIVT

    انجام:

    معلم فناوری اطلاعات

    برای رده صلاحیت I

    با. الغای، 2006

    معرفی. 3

    1. لزوم مطالعه مبحث "روش های مرتب سازی داده ها". 4

    2. کار مقدماتی مبحث "روش های مرتب سازی داده ها". 4

    3. روش های مرتب سازی. 7

    4. پیچیده تر و بیشتر روش های موثرمرتب سازی. 10

    5. ویژگی های مقایسه ایروش های مرتب سازی یازده

    نتیجه. 12

    ادبیات.. 13

    کاربرد. 14

    کاربرد. 15

    کاربرد. 16

    کاربرد. 20

    کاربرد. 21

    کاربرد. 24

    کاربرد. 26

    کاربرد. 28

    کاربرد. 29

    کاربرد. 34

    کاربرد. 37

    کاربرد. 42

    معرفی

    این مقاله به موضوع بزرگ "روش های مرتب سازی داده ها" می پردازد که در دوره OIVT اجباری است.
    مطالعه مقادیر جدولی و روش های مرتب سازی بخشی جدایی ناپذیر از هر دوره علوم کامپیوتر است. این را حداقل از آنجا می توان دریافت که این موضوع در تمام کتاب های درسی که امروزه رایج است، با وجود تفاوت در رهنمودهای ایدئولوژیک و روش شناختی نویسندگان آنها مورد توجه قرار گرفته است.
    مرتب سازی فرآیند مرتب سازی برخی از داده ها (جدول) بر اساس کلید است. ممکن است کلیدها متفاوت باشند. مثلا تبدیل کنید
    1) جدول اعداد به ترتیب صعودی،
    2) جدول نام خانوادگی - بر اساس حروف الفبا و فقط با حرف اول،
    3) عناصری که فقط در مکان های زوج جدول به ترتیب نزولی قرار دارند.
    بدیهی است که کار با داده های "مرتب شده" آسان تر و سریعتر از داده های تصادفی است. هنگامی که عناصر "مرتب شده" هستند، پیدا کردن تلفن یک دوست آسان تر است دفترچه تلفن 500 صفحه، یک کلمه را سریعتر در فرهنگ لغت 700 صفحه پیدا کنید.

    اهمیت موضوع «مرتب‌سازی» نیز با نقش ویژه جداول مشخص می‌شود. همه کاربردهای کامپیوترها بر اساس توانایی آنها در پردازش سریع و دقیق حجم زیادی از اطلاعات است و این تنها زمانی امکان پذیر است که اطلاعات یکدست و مرتب شده باشند. بنابراین جداول به عنوان ابزار اصلی ارائه اطلاعات همگن به ناچار در تمامی برنامه های کامپیوتری واقعی استفاده می شوند.
    معماری نیز بر اساس اصل جدولی است. کامپیوترهای مدرن: حافظه یک ماشین را می توان به عنوان یک آرایه بزرگ از بایت ها در نظر گرفت که آدرس های آنها به ترتیب صعودی است. بنابراین، بدون درک نهاد اطلاعاتیجداول و الگوریتم های اصلی برای پردازش آنها، نمی توان ایده های کاملی در مورد قابلیت های رایانه ها و اصول عملکرد آنها شکل داد. از این رو نیاز به مبحث "مرتب سازی" در دوره آموزشی عمومی علوم کامپیوتر است. این مبحث در دوره پیشرفته علوم کامپیوتر کاملا ضروری است. برای ساخت هر برنامه پیچیده و معنی‌داری، به یک فرمان مطمئن نیاز دارید اصول کلیکاربرد جداول و روش های اساسی پردازش آنها.
    عناصر مرتب سازی داده ها در بسیاری از آثار نویسندگان مختلف توضیح داده شده است (نگاه کنید به). این نشان دهنده ارتباط موضوع "مرتب سازی"، مطالعه روش های آنها، توسعه روش شناسی برای آموزش موضوعات از دوره JIHT مربوط به مرتب سازی داده ها است.
    در MOU ​​SOSH با. علوم کامپیوتر Pebbles سالهاست که تدریس می شود. در طول سال ها، ما مجبور شده ایم برنامه را بیش از یک بار تغییر دهیم. گاهی اوقات نیاز به تغییر روش ارائه و محتوای مطالب بود که بخشی از آن ناشی از توسعه است علوم کامپیوترو فرصت های جدید و فناوری های جدید ناشی از آن.

    موضوع "مرتب سازی" بخشی جدایی ناپذیر از برنامه است. معلم دارد تعداد زیادی ازالگوریتم های آماده برای حل مسائل خاص. در روند مطالعه موضوع، موثر است: اجرای الگوریتم ها و برنامه های آماده توسط دانش آموز به تنهایی، "به جای رایانه"، اجرای "ردیابی" الگوریتم برای داده های اولیه خاص ، انتخاب چنین داده هایی که الگوریتم بیشترین یا کمترین تعداد اقدامات ممکن را برای آنها انجام دهد. برای هر موضوع، چنین کاری نه تنها با رایانه، بلکه با یک نوت بوک، به گفته نویسنده، نتیجه مثبتی می دهد.
    هدف از این کار ارائه روش شناسی تدریس در پایه های 10-11 مبحث "مرتب سازی عناصر" و همچنین موضوعات مرتبط با مرتب سازی داده ها است.
    علاوه بر این، با استفاده از این مبحث به عنوان مثال، می خواهم روش تدریس را که در آموزش بسیاری از موضوعات دیگر استفاده می شود، نشان دهم.
    روش‌های مرتب‌سازی «سریع» که درک آن‌ها دشوارتر است، در کلاس‌های اختیاری مطالعه می‌شوند.

    1. لزوم مطالعه مبحث "روش های مرتب سازی داده ها"

    مطالعه هر موضوعی باید با رساندن دانش آموز به این نیاز، نشان دادن نیاز به حل طیف مربوطه از مسائل، ارائه مثال هایی که برای دانش آموزان قابل درک باشد، نشان دادن استفاده از عناصر مرتب سازی در وظایف کاربردی(در عمل، در دنیای اطراف ما).
    به محض اینکه مفهومی شهودی از معنای «مرتب‌سازی» داده‌ها ارائه کردیم، در مورد نیاز به آن صحبت می‌کنیم، به عنوان مثال، مرتب‌سازی داده‌ها بر اساس برخی ویژگی‌ها. ما نمونه هایی از سازماندهی شخصی می آوریم نوت بوک ها، لغت نامه ها، دایرکتوری های تلفن، جداول ریاضی، دایره المعارف ها. تصور نحوه استفاده از اشیاء فهرست شده در صورتی که اطلاعات موجود در آنها مرتب نشده باشد دشوار است.
    در فرهنگ لغت، کلمه "مرتب سازی" به عنوان توزیع، انتخاب بر اساس انواع، کیفیت، اندازه ها، با توجه به ویژگی های مشابه تعریف شده است، در برنامه نویسی این کلمه به طور سنتی به معنای محدودتر استفاده می شود.
    مرتب سازی در دوره OIHT معمولاً به عنوان فرآیند قرار دادن عناصر یک مجموعه معین از اشیاء در یک ترتیب خاص، معمولاً به ترتیب صعودی یا نزولی (زمانی که عناصر مرتب شده اعداد هستند) درک می شود. به ترتیب حروف الفبا(هنگام مرتب سازی اطلاعات متنی).
    بدیهی است که استفاده از داده های مرتب شده آسان تر از داده های تصادفی است. وقتی عناصر مرتب شوند، پیدا کردن آنها آسان تر است، انجام عملیات های مختلف با آنها آسان تر است. با داده های مرتب شده، تشخیص وجود عناصر گمشده آسان تر است. برای دو جدول مرتب شده، یافتن عناصر مشترک آسان تر است.
    مرتب سازی همچنین ابزار قدرتمندی برای سرعت بخشیدن به کار تقریباً هر الگوریتمی است که نیاز به دسترسی مکرر دارد عناصر خاص. همانطور که یکی از کلاسیک های تئوری برنامه نویسی D. Knuth در [4] می نویسد: "حتی اگر مرتب سازی تقریباً بی فایده بود، دلایل زیادی برای انجام آن وجود داشت! روش های مرتب سازی مبتکرانه نشان می دهد که به خودی خود به عنوان یک موضوع مطالعه جالب است. " تجزیه و تحلیل این روش ها از نقطه نظر آموزشی نیز بسیار مفید است، زیرا می توان از آنها برای نشان دادن بصری موقعیت های مختلف استفاده کرد. به گفته خالق زبان پاسکال، N. Wirth، "کسی این تصور را به دست می آورد که می توان یک دوره برنامه نویسی کامل را تنها با انتخاب نمونه هایی از مسائل مرتب سازی ایجاد کرد" [5].
    این دسته از الگوریتم‌ها همچنین جالب هستند زیرا به وضوح غنی‌ترین امکانات برنامه‌نویسی را نشان می‌دهند: چند راه مختلف می‌توانید به یک هدف برسید - به دست آوردن یک آرایه مرتب! در مجموعه ای از الگوریتم های مرتب سازی، نیاز روشن می شود تحلیل مقایسه ایالگوریتم ها و ارزیابی کیفیت آنها که ملاک آن افزایش عملکرد و صرفه جویی در حافظه است. جای تعجب نیست که سوالات مربوط به مرتب سازی جایگاه مهمی در درس علوم کامپیوتر مدرسه را اشغال کنند.

    2. کار مقدماتی مبحث "روش های مرتب سازی داده ها".

    جستجو و مرتب‌سازی مربوط به جدولی و سایر ساختارهای داده پیچیده است، بنابراین لازم است ابتدا این ساختارهای داده پیچیده، به عنوان مثال، آرایه‌های خطی و مستطیلی (جدول) مورد مطالعه قرار گیرد.
    ساختاری برای نمایش اطلاعات همگن در برنامه نویسی معمولاً آرایه نامیده می شود. (در واقع، اصطلاحات جدول و آرایه در این زمینه مترادف کامل هستند).
    در کلاس 10 مفهوم جدول به عنوان معرفی شده است راه جدیدذخیره سازی اطلاعات مفاهیم جدید در مواردی که نه به طور تصادفی، بلکه به عنوان یک ضرورت در حل برخی مسائل جدید به وجود می آیند، به بهترین وجه توسط دانش آموزان درک می شوند. یک مفهوم جدید در نتیجه حل یک مسئله مقدماتی انتخاب شده خاص بوجود می آید. در واقع خود دانش آموزان وسایل گمشده را اختراع می کنند و معلم باید شکل گیری این وسایل را در مسیر درست هدایت کند.

    یک کار مقدماتی ممکن برای مبحث "جدول" - یافتن محیط چند ضلعی با طول ضلع های مشخص در پیوست 1 توضیح داده شده است. این کار دانش آموزان را به ویژگی های اصلی مقادیر جدولی می رساند: یک جدول متشکل از بسیاری از متغیرهای ساده است که می توان به آنها دسترسی داشت. نه با نام های منحصر به فرد، بلکه با نام جدول مشترک با شماره عنصر.

    پس از چنین مقدمه ای، دانش آموزان متوجه می شوند که چرا جداول مورد نیاز است، آنها آماده درک مفاهیمی مانند عنصر، شاخص، دسترسی به عنصر و غیره هستند.

    سوال مهمی که باید در حل مسائل واقعی پاسخ داده شود این است که چه زمانی و چه زمانی متغیرهای ساده را در جداول ترکیب نکنیم. کلید پاسخ، درک جدول به عنوان یک مقدار ترکیبی است که اطلاعات همگن را ذخیره می کند.

    همگنی به این معنی است که همه عناصر جدول برابر هستند: آنها معنای معنی دار یکسانی دارند و عملیات مشابهی در طول پردازش روی آنها انجام می شود.

    برای آموزش حل مسائل به دانش آموز، نه تنها باید او را با تکنیک های معمولی آشنا کرد، بلکه باید موقعیت هایی را نیز نشان داد که در آن این یا آن تکنیک کار می کند.

    یک طبقه بندی خوب باید به این امر کمک کند، کاربرد آن باید مسیر را از شرایط به راه حل کوتاه کند. برای این کار باید کارهایی را که همزمان شرایط و اصول مشابهی برای حل دارند گروه بندی کرد.(به پیوست شماره 2 مراجعه کنید).

    کلی بودن شرایط، شناخت تکلیف توسط دانش آموز را تضمین می کند، آن را به یک نوع خاص اختصاص می دهد، یعنی امکان استفاده واقعی از طبقه بندی را ایجاد می کند.
    کلی بودن راه حل ها به دانش آموز کمک می کند تا قدم بعدی را بردارد - روش حل را انتخاب کند، یعنی اثربخشی طبقه بندی را تضمین می کند.
    بنابراین، طبقه بندی باید بر اساس ویژگی خاصی باشد که به وضوح از وضعیت مشکل قابل مشاهده است و به طور قابل توجهی بر حل آن تأثیر می گذارد. به این ترتیب، پیشنهاد می شود در نظر گرفته شود نقش اطلاعاتیجداول در الگوریتم، یعنی نوع مقدار جدولی.
    بدیهی است که یک جدول می تواند نتیجه یک الگوریتم (پر کردن)، یک آرگومان (پردازش) و یک آرگومان نتیجه (اصلاح) باشد. با بررسی دقیق تر، مشخص می شود که پردازش (جدول - آرگومان) شامل یک کلاس بسیار بزرگ از وظایف است که قابل حل نیست. روش های مختلف. در میان آنها دو نفر هستند گروه های بزرگ: تجزیه و تحلیل وظایف و کارهای جستجو. در کارهای تجزیه و تحلیل، مشاهده کل جدول و تعیین برخی از ویژگی های آن (مجموع، حاصلضرب، تعداد عناصر با خاصیت معین و ...) لازم است در کارهای جستجو، عنصری در جدول پیدا شود که دارای ویژگی مورد نظر است و برای این کار نیازی به مشاهده کل جدول نیست.
    از سوی دیگر، بسیاری از کارهای اصلاحی نیازی به توسعه تکنیک های خاصی ندارند و به ترکیبی از تجزیه و تحلیل و پر کردن خلاصه می شوند. برای مثال، این کار معروف تصحیح گزارش است (عناصر کمتر از 100 با 100 جایگزین می شوند) و موارد مشابه. بنابراین، ارزش ندارد که اصلاح را به عنوان یک کلاس جداگانه از وظایف متمایز کنیم.
    مسائل جایگشتی که در آنها لازم است عناصر یک جدول داده شده را مطابق با برخی الزامات بازآرایی کنیم، جالب توجه است. این وظایف قابل تقلیل به دیگران نیست و می توان آنها را در نظر گرفت گروه مستقل. وظیفه اصلی جایگشت مرتب کردن عناصر آرایه است، یعنی عناصر آرایه باید طوری مرتب شوند که مثلاً به ترتیب صعودی مرتب شوند. وظیفه مرتب سازی آرایه ها از آسمان نمی افتد، بلکه به یکی از گروه های وظایف برای مقادیر جدولی تعلق دارد. در نهایت، گروه های کاری زیر را دریافت می کنیم:
    1. پر کردن
    2. تجزیه و تحلیل
    3. جستجو کنید
    4. جایگشت.
    یک سری وظایف برای هر گروه در پیوست 3 آورده شده است.

    در واقع تمام تکنیک های اساسی برای ساخت الگوریتم ها بر روی جداول خطی شکل می گیرند. رفتار میزهای مستطیلیمنجر به عارضه کمی اما نه کیفی می شود. جدول خطی مفهوم اصلی و اولیه است و میز مستطیلی را می توان به صورت جدول خطی متشکل از جداول خطی ساخت. بنابراین در یک دوره آموزش عمومی فقط کافی است جداول خطی را در نظر بگیریم، شاید به ذکر، اما نه تجزیه و تحلیل دقیق، مستطیل شکل. هنگام اجرای یک دوره پیشرفته، مطالعه جداول مستطیلی ضروری است، اما در این مورد، ابتدا باید اصول اولیه پردازش جداول خطی را کاملاً درک کنید.
    در درس مدرسه ما JIHT، در واقع، هیچ مجموعه ای از وظایف و مطالب آموزشی منتشر شده وجود ندارد. معلم انفورماتیک باید دائماً با انتخاب و نظام مندی شرایط مشکلات سر و کار داشته باشد.

    تجربه چندین ساله نشان داده است که علاوه بر تدوین الگوریتم ها و برنامه ها توسط معلم و دانش آموزان، مطلوب است که به اجرای الگوریتم های آماده نیز توجه زیادی شود.
    دانش آموزان موظفند:
    1) الگوریتم را اجرا کنید
    2) تعیین کنید که چه اتفاقی می افتد زمانی که بر روی داده های خاص اجرا می شود،
    3) وضعیت مشکل را طبق الگوریتم تمام شده بازیابی کنید،
    4) تجزیه و تحلیل تعداد اقدامات "ابتدایی" در طول اجرای الگوریتم، که نشان دهنده سرعت الگوریتم یا زمان اجرای آن است.
    5) داده هایی را انتخاب کنید که تعداد اقدامات "ابتدایی" برای آنها حداقل باشد و داده هایی که برای آنها حداکثر خواهد بود.

    شما می توانید با الگوریتم های آماده به اشکال مختلف کار کنید، به عنوان مثال:
    1. هنگامی که به همه دانش آموزان یک الگوریتم را توضیح می دهید.
    2. هنگام کار با دانش آموز به صورت انفرادی.
    3. هنگام توضیح یک موضوع خاص برای دانش آموزانی که مثلاً به دلیل بیماری موضوع را از دست داده اند.
    4. هنگام درک موضوع با دانش آموزانی که همیشه مطالب را بار اول یاد نمی گیرند.
    کار در اشکال مختلف با الگوریتم های آماده به شما امکان می دهد:
    1. در نظر گرفتن ویژگیهای فردیدانش آموزان؛
    2. در نظر گرفتن روانشناسی، واکنش آنها، متفاوت در زمان.
    3. توانایی های منطقی و الگوریتمی خود را توسعه دهند.
    4. تعمیق دانش در مورد موضوع مربوطه، زیرا برای به دست آوردن نتیجه، خود او به عنوان یک مجری باید الگوریتمی را اجرا کند که به معنای ادغام همه ساختارها است تا عمیق تر بفهمد که چگونه انجام می شوند، چه ویژگی هایی دارند. .

    یکی دیگر از عناصر کار مقدماتی برای موضوع "مرتب سازی" مطالعه آرایه ها است بعد متغیردر زبان های برنامه نویسی ضمیمه 4 وظایفی را که برای حل به دانش آموزان ارائه می شود نشان می دهد.
    کارهای مقدماتی انجام شده با دانش آموزان کلاس دهم به ما امکان می دهد مستقیماً به مطالعه روش های مرتب سازی بپردازیم.

    بنابراین، در سال اول تحصیل (در کلاس 10)، پایه و اساس مطالعه جداول، کار کردن یک سری کارها و الگوریتم ها برای انتخاب حداکثر و حداقل عناصر، تغییر عناصر و غیره گذاشته شد.
    در کلاس یازدهم - ما به روش های مرتب سازی بر اساس الگوریتم های پردازش جدول مورد مطالعه نزدیک می شویم.
    وظایف جستجوی عنصر مورد نظر، تدوین فرهنگ لغت، کتب مرجع، گردآوری جداول قرعه کشی و فهرست بندی دانش آموزان در مجله در نظر گرفته شده است.
    برای حل بسیاری از مشکلات، راحت است که ابتدا داده ها را بر اساس یک ویژگی خاص مرتب کنیم.
    داده ها مانند عناصر آرایه را می توان مرتب کرد:
    صعودی - هر عنصر بعدی بزرگتر از عنصر قبلی است:
    a[1]< a < a[n];
    بدون کاهش - هر عنصر بعدی کمتر از عنصر قبلی نیست:
    آ<= а <=. . .<= а[n];
    نزولی - هر عنصر بعدی کمتر از عنصر قبلی است:
    a [ 1 ]> a> ... > a[n]،
    غیر افزایشی - هر عنصر بعدی از عنصر قبلی بزرگتر نیست:
    a [ 1 ] >= a >= ... >=a[n].

    3. روش های مرتب سازی

    تعداد کمی وجود دارد روش های مختلفمرتب سازی، متفاوت از یکدیگر در درجه بازده، که به عنوان تعداد مقایسه ها و تعداد مبادلات انجام شده در فرآیند مرتب سازی، زمان اجرا و مقدار OP اشغال شده درک می شود. بیایید نگاهی دقیق تر به برخی از این روش ها بیندازیم. ابتدا چهار روش ساده ارائه شده است. هر معلم می تواند هر ترتیبی را برای مطالعه این روش ها انتخاب کند، اگر ترتیب پیشنهادی مناسب نباشد.
    با این حال، قبل از اینکه هر روش مرتب‌سازی در نظر گرفته شود، لازم است الگوریتم‌هایی که قبلاً مطالعه شده‌اند را تکرار کنید که این روش بر آن تکیه دارد.
    ابتدا دو روش مرتب سازی را در نظر بگیرید:
    مرتب سازی انتخابی (یا خطی) و مرتب سازی مبادله ای (یا حبابی).
    هر دو روش چندان مؤثر نیستند و به ندرت در عمل استفاده می شوند. اما پس چرا اصلا باید درگیر شوند؟ اولاً، در بسیاری از موارد ساده (مثلاً زمانی که باید فقط 20-25 عدد را مرتب کنید)، آنها کاملاً رضایت بخش هستند. ثانیاً این روش ها برای ما جالب هستند زیرا رفتار طبیعی فردی را که با دست مرتب می کند شبیه سازی می کنند. این دو روش هستند که به آسانی در قالب الگوریتم های واضح توصیف می شوند و منجر به پیاده سازی نرم افزاری ساده می شوند.

    مرتب سازی انتخاب را در نظر بگیرید.

    مرتب سازی انتخاب به این معنی است که حداقل عنصر ابتدا در یک دنباله نامرتب انتخاب می شود. این عنصر از پردازش بیشتر حذف می شود و دنباله باقی مانده از عناصر به عنوان اصلی در نظر گرفته می شود و این روند تا زمانی که همه عناصر انتخاب شوند تکرار می شود. بدیهی است که عناصر انتخاب شده یک توالی مرتب تشکیل می دهند. حداقل عنصر انتخاب شده در دنباله اولیه به چندین روش در محل مورد نظر خود در ترتیب مرتب شده قرار می گیرد:
    1. حداقل عنصر پس از اسکن i-امین به منتقل می شود مکان i-ام(i=1، 2، 3، از یک آرایه دیگر، و در قدیمی، اصلی، مقدار بسیار زیادی در جای آرایه انتخاب شده قرار می گیرد، که از نظر مقدار از هر عنصری از آرایه در حال مرتب سازی بیشتر است. آرایه در این تغییر کرد. way به عنوان اصلی گرفته می شود و اسکن بعدی انجام می شود بدیهی است که در این حالت اندازه آرایه پردازش شده 1 کمتر از اندازه قبلی است.
    2. حداقل عنصر بعد از اسکن i به مکان i-ام (i=1، 2، 3، آرایه داده شده، و عنصر از i-امین مکان به مکان انتخاب شده منتقل می شود. یک. پس از هر اسکن، عناصر مرتب شده (از اول تا عنصر با شاخص i) از پردازش بیشتر حذف می شوند، یعنی اندازه هر آرایه پردازش شده بعدی 1 کمتر از اندازه قبلی است.
    این روش مرتب سازی معمولاً برای آرایه هایی استفاده می شود که حاوی عناصر تکراری نیستند. برای رسیدن به این هدف می توانید به صورت زیر عمل کنید:
    1) حداکثر عنصر آرایه را انتخاب کنید.
    2) آن را با آخرین عنصر تعویض کنید (پس از آن بزرگترین عنصر در جای خود قرار می گیرد).
    3) نکات را تکرار کنید. 1-2 با n-1 عناصر باقی مانده، یعنی بخشی از آرایه را در نظر بگیرید، از عنصر اول تا عنصر ماقبل آخر شروع کنید، حداکثر عنصر را در آن پیدا کنید و آن را با ماقبل آخر تعویض کنید. (n-1)امین عنصر آرایه، و به همین ترتیب، تا زمانی که یک عنصر باقی بماند که از قبل در جای خود باشد.
    در مجموع، انجام این دنباله از اقدامات n-1 بار طول می کشد. در فرآیند مرتب سازی، قسمت مرتب شده آرایه افزایش می یابد و به ترتیب مرتب نشده، کاهش می یابد.

    بنابراین، این روش بر اساس یافتن حداکثر (حداقل) مقدار و جایگشت است. علاوه بر این، این الگوریتم ها قبلاً کار شده اند و ما به سادگی بر آنها تکیه می کنیم. بنابراین، قبل از در نظر گرفتن این روشمرتب سازی لازم است راه حل این مشکلات را به خاطر بسپارید. تنها مشکلی که هنگام کامپایل کردن الگوریتم ایجاد می شود این است که ما با بخشی از مقدار جدول کار می کنیم. مثلا این الگوریتممی توان استفاده از الگوریتم ها یا رویه های کمکی را نشان داد، زیرا جستجو برای حداکثر مقدار را می توان به صورت تشخیص داد برنامه مستقل، یعنی به عنوان یک رویه.

    الگوریتم هایی که این روش را پیاده سازی می کنند در پیوست 5 مورد بحث قرار گرفته اند.
    شما می توانید به دانش آموزان پیشنهاد دهید:
    1. شمارش تعداد مقایسه های انجام شده از نوع A[I]< AF.
    2. تعداد جایگشت های نوع Swap (A, B) را بشمارید.
    پس از تجزیه و تحلیل روش اول و دوم از نظر کارایی الگوریتم که در کمترین تعداد انتقال و مقایسه انجام شده بیان می شود، به همراه دانش آموزان باید یک روش مرتب سازی انتخاب سوم دیگر نوشته شود (به پیوست 5 مراجعه کنید).
    پیشرفت مرتب سازی در روش سوم برای مرتب سازی آرایه 30، 17، 73، 47، 22، 11، 65، 54 در جدول منعکس خواهد شد.

    در درس های بعدی علوم کامپیوتر، باید روش مرتب سازی انتخابی مورد مطالعه را ادغام کنید.

    با بازگشت دوباره به مسئله کارایی الگوریتم های مرتب سازی انتخاب، مشخص می کنیم که کمترین تعداد عملیات برای آرایه اصلی که قبلاً به ترتیب دلخواه مرتب شده است انجام می شود. بیشترین تعداد اقدامات برای آرایه اصلی انجام می شود که به معنای مخالف مرتب شده اند.

    بیایید مرتب سازی تبادل را در نظر بگیریم (روش "حباب").

    مرتب سازی Exchange روشی است که در آن تمام عناصر مجاور یک آرایه به صورت جفت با یکدیگر مقایسه می شوند و اگر عنصر قبلی بزرگتر از عنصر بعدی باشد، مبادله می شوند. در نتیجه، عنصر ماکزیمم به تدریج به سمت راست منتقل می‌شود و در پایان، جایگاه راست انتهایی خود را در آرایه می‌گیرد و پس از آن از پردازش بیشتر حذف می‌شود. سپس این روند تکرار می شود و دومین عنصر بزرگ جای آن را می گیرد که آن نیز از بررسی بیشتر خارج می شود. این تا زمانی ادامه می یابد که کل دنباله سفارش داده شود.
    اگر دنباله اعدادی که مرتب می شوند به صورت عمودی قرار می گیرند (نخستین عنصر در پایین است) و شما حرکات عناصر را دنبال می کنید (شکل 2 در پیوست 6)، آنگاه می توانید ببینید که عناصر بزرگ مانند حباب های هوا در آب، "شناور" به موقعیت مربوطه. بنابراین، «مرتب‌سازی» را مرتب‌سازی «حبابی» یا مرتب‌سازی «حبابی» نیز می‌گویند.
    مرتب سازی مبادله ای ساده را می توان برای هر آرایه ای اعمال کرد.
    بنابراین، در یک مرتب‌سازی «مبادله»، همه عناصر مجاور به صورت جفت با یکدیگر مقایسه می‌شوند و اگر عنصر قبلی بزرگتر از عنصر بعدی باشد، مبادله می‌شوند. یعنی، ما دوباره بر اساس الگوریتم‌های از قبل توسعه‌یافته برای تنظیم مجدد عناصر هستیم.
    شرح این روش به تفصیل در پیوست 6 آمده است.

    "Shaker" - مرتب سازی.

    علیرغم تمام پیشرفت‌های انجام شده در بالا، آرایه بعدی (تقریباً سفارشی!) بعدی (تقریباً سفارشی!) در هفت پاس انجام می‌شود. این به این دلیل است که هنگام مرتب سازی با روش در نظر گرفته شده، یک عنصر نمی تواند در یک پاس بیش از یک موقعیت به سمت چپ حرکت کند. بنابراین اگر حداقل عنصر آرایه در انتهای سمت راست خود باشد (مانند این مثال)، باید حداکثر تعداد پاس ها را انجام دهید. بنابراین، یک بهبود دیگر در روش مرتب‌سازی "حباب" به طور طبیعی خود را نشان می‌دهد - گذرهای متناوب آرایه در هر دو جهت، و نه فقط از ابتدا تا انتهای آن. در این مورد، زمان مرتب سازی ممکن است کمی کاهش یابد. به این روش مرتب‌سازی «shaker»-sorting (از کلمه انگلیسی shake - shake, shake) می‌گویند. کار آن در مثال مرتب سازی آرایه ای از 8 عنصر نشان داده شده است (در شکل 3 در پیوست 7). الگوریتم های این روش در پیوست 7 به تفصیل آمده است.

    مرتب سازی شمارش

    این روش ساده و قابل درک این است که هر عنصر آرایه با سایر عناصر مقایسه می شود. مکان هر عنصر در آرایه مرتب شده به تعداد عناصر کمتر از آن بستگی دارد. به عبارت دیگر، اگر عنصری از 13 عنصر دیگر بیشتر شود، جای آن در دنباله مرتب شده 14 است. بنابراین برای مرتب‌سازی باید همه عناصر را جفت مقایسه کرد و شمارش کرد که چند عنصر از هر کدام کمتر است. عنصر فردی. پس از آن، تمام عناصر آرایه اصلی را می توان در مکان های مربوطه خود در یک آرایه جدید، مخصوصا ایجاد شده قرار داد. الگوریتم مرتب سازی شمارش در پیوست 8 به تفصیل آمده است.

    مرتب سازی درج (روش درج مستقیم).

    مرتب‌سازی درج، مانند مرتب‌سازی روش انتخاب ساده، معمولاً برای آرایه هایی استفاده می شود که حاوی عناصر تکراری نیستند. مرتب سازی با روش گنجاندن مستقیم، مانند همه مواردی که در بالا توضیح داده شد، در مراحل انجام می شود. بر مرحله k-امدر نظر گرفته می شود که بخشی از آرایه حاوی اولین عناصر k-1 از قبل مرتب شده است، یعنی a< a< . . . < a. Далее необходимо взять عنصر kthو جایی برای آن در قسمت مرتب شده آرایه انتخاب کنید تا پس از درج ترتیب آن نقض نشود، یعنی باید چنین j را پیدا کنید (1<=j<=k-1), что a<=a[k]

    این روش با جزئیات بیشتر در پیوست 9 مورد بحث قرار گرفته است.

    4. روش های مرتب سازی پیچیده تر و کارآمدتر.

    هنگام حل مسائل پیچیده تر، از جمله مسابقات، باید مجموعه داده های بزرگی را پردازش کرد. روش‌های مرتب‌سازی آسان اما آهسته که در بخش قبل توضیح داده شد، نامناسب می‌شوند. دانش آموزان شروع به جستجوی سایر روش های مرتب سازی می کنند. زمانی که دانش‌آموزان فاقد روش‌های مرتب‌سازی کارآمدتر هستند، این روش‌های پیچیده‌تر در نظر گرفته می‌شوند.
    هدف دنبال شده: آشنایی با الگوریتم های مرتب سازی و جستجوی کارآمد. اجرای رویه ها و توابع بازگشتی مطالعه روش های مرتب سازی سریع در حلقه ها و فعالیت های فوق برنامه انجام می شود.

    مرتب سازی مبادله تقسیم شده (مرتب سازی Hoare)

    مرتب سازی بر اساس روش مبادله ساده (روش "حباب") به طور متوسط ​​ناکارآمدترین است. این به دلیل ایده بسیار روش است که در فرآیند مرتب سازی نیاز به مقایسه و مبادله فقط عناصر همسایه با یکدیگر دارد. امکان بهبود قابل توجه روش مرتب سازی بر اساس مبادله وجود دارد. این بهبود منجر به بهترین روش مرتب‌سازی آرایه‌های موجود امروزی می‌شود که می‌توان آن را مرتب‌سازی split-exchange نامید. مبتنی بر مقایسه و تبادل عناصری است که در بیشترین فاصله ممکن از یکدیگر قرار دارند. این روش Ch. را در سال 1962 ارائه کرد. از آنجایی که عملکرد این روش چشمگیر است، نویسنده آن را "سریع" نامیده است.
    این روش با جزئیات بیشتر در پیوست 10 مورد بحث قرار گرفته است.

    ادغام مرتب سازی

    روش دیگری برای مرتب سازی عناصر آرایه وجود دارد که کارایی آن نسبتاً بالا است - روش ادغام.
    قبل از ارائه این روش مرتب سازی، مد است که دانش آموزان مسئله زیر را که زمانی المپیاد بود، اما اکنون در درس های معمولی حل می شود، مطرح کنند:
    و با حداقل تعداد مقایسه. بر اساس الگوریتم این مسئله که خود دانش آموزان می توانند بدون تذکر معلم آن را حل کنند، روش تلفیقی ساخته شده است.
    البته می توانید با استفاده از روش درج مشکل را حل کنید - هر عنصر از آرایه A را در جای مربوط به خود در آرایه B قرار دهید. البته در این صورت تعداد مقایسه ها از n+m بیشتر خواهد شد.
    روش حل مشکل در پیوست 11 توضیح داده شده است.

    روش مرتب سازی "ادغام" شامل تقسیم آرایه داده شده به چند قسمت است که به طور جداگانه مرتب می شوند و متعاقبا "ادغام" به یک قسمت می شوند.

    بگذارید آرایه a به قطعات طول k تقسیم شود، سپس اولین قسمت a[I]، a، . . .، a [k]، دومی a، a،...، a و غیره است. اگر n بر k قابل تقسیم نباشد، قسمت آخر کمتر از k عنصر خواهد داشت.
    پس از مرتب شدن آرایه‌ها، می‌توانید آن‌ها را در آرایه‌ها-قطعه‌های مرتب‌سازی‌شده ترکیب کنید، که شامل بیش از 2k عنصر نباشد، که سپس می‌توان آن‌ها را به آرایه‌های مرتب شده با طول حداکثر 4k ترکیب کرد، و به همین ترتیب، تا زمانی که به دست بیاورید. یک آرایه سفارش داده شده بنابراین، برای به دست آوردن یک آرایه مرتب شده با این روش، باید به طور مکرر دو بخش مرتب شده آرایه را در یک بخش مرتب شده "ادغام" کنید. در این حالت سایر قسمت های آرایه تحت تأثیر قرار نمی گیرند. این روش با جزئیات بیشتر به عنوان ماده اختیاری در پیوست 12 توضیح داده شده است.

    5. ویژگی های مقایسه ای روش های مرتب سازی.

    یکی از روش های ساده - روش شمارش را به یاد بیاورید. از آنجایی که این روش، علیرغم بهبود، مستلزم مقایسه همه جفت عناصر است، مدت زمان مرتب‌سازی آرایه‌ای از n عنصر متناسب با n2 خواهد بود. مرتب سازی بر اساس درج، مبادله، و مرتب سازی انتخاب تا حدودی عملکرد بهتری دارند، اما مدت زمان رویه ها در آنها نیز متناسب با n2 است. در عین حال، می‌توان نشان داد که زمان صرف شده برای مرتب‌سازی یک آرایه با روش‌هایی مانند مرتب‌سازی سریع یا heapsort متناسب با n log2n است، یعنی بسیار کمتر. بنابراین، همه روش های مرتب سازی در نظر گرفته شده به ساده (n2) و پیشرفته یا "لگاریتمی" (n log2n) تقسیم می شوند.
    تجزیه و تحلیل دقیق از روش های مرتب سازی اصلی در آثار انجام شده است. به عنوان شاخصی برای ارزیابی یک روش خاص، از تعداد مقایسه ها و تعداد حرکت عناصر در حین مرتب سازی استفاده می کنند. اما در این ویژگی ها زمان صرف شده برای عملیات دیگر مانند کنترل حلقه و ... در نظر گرفته نمی شود بدیهی است که ملاک مقایسه روش های مختلف زمان صرف شده برای مرتب سازی است. داده های مربوط به زمان اجرای روش های مرتب سازی توسط N. Wirth به دست آمد.
    البته، کامپیوترهای مدرن بسیار سریعتر از زمانی هستند که محاسبات انجام شده است، یعنی داده های داده شده در آن قدیمی هستند. در عین حال، عملکرد نسبی روش های مختلف به طور کلی تغییر نکرد. پیوست 12 ویژگی های نسبی نه روش مرتب سازی را ارائه می دهد که بر اساس نتایج ارائه شده توسط N. Wirth به دست آمده است.
    داده های ارائه شده تفاوت واضحی را بین روش ها نشان می دهد: n2 و n log2n. جدول 1 نشان می دهد که مرتب سازی درج بهترین روش در بین روش های ساده و مرتب سازی سریع در میان روش های پیشرفته است.
    N. Wirth همچنین به موارد زیر اشاره می کند:
    - مرتب سازی "حبابی" بدترین در بین تمام روش های مقایسه شده است. نسخه بهبود یافته آن - "شکر" - مرتب سازی - هنوز بدتر از مرتب سازی با درج های ساده و مرتب سازی بر اساس انتخاب است.
    - یکی از ویژگی های مرتب سازی سریع این است که یک آرایه را با عناصری که به ترتیب معکوس مرتب شده اند، تقریباً به همان ترتیبی که به ترتیب مستقیم مرتب شده اند مرتب می کند.
    باید اضافه کرد که نتایج فوق با مرتب سازی آرایه های عددی به دست آمده است. اگر مقدار عناصر آرایه داده‌هایی از نوع رکورد باشد که در آن فیلدهای همراه (مولفه‌ها) 7 برابر بیشتر از فیلد عددی که مرتب‌سازی انجام می‌شود، حافظه اشغال می‌کنند، تصویر تغییر می‌کند.
    جدول 2 ویژگی های مقایسه ای روش ها را برای مرتب سازی آرایه های داده از نوع "رکورد" نشان می دهد.
    واضح است که
    1) مرتب سازی انتخاب سود قابل توجهی می دهد و بهترین روش ساده است.
    2) مرتب سازی حبابی هنوز بدترین روش است.
    3) مرتب سازی سریع حتی موقعیت خود را به عنوان سریع ترین روش تثبیت کرد و معلوم شد که واقعاً بهترین الگوریتم مرتب سازی است.

    مرتب سازی الگوریتم ارزیابی

    الگوریتم های مرتب سازی برای سرعت اجرا و کارایی حافظه رتبه بندی می شوند:

    طبقه بندی الگوریتم های مرتب سازی

    • پایداری(پایداری) - مرتب سازی پایدار موقعیت نسبی عناصر مساوی را تغییر نمی دهد.
    • طبیعی بودن رفتار- کارایی روش هنگام پردازش داده های سفارش داده شده یا جزئی سفارش داده شده. الگوریتم اگر این ویژگی دنباله ورودی را در نظر بگیرد و عملکرد بهتری داشته باشد به طور طبیعی رفتار می کند.

    یکی دیگر از ویژگی های مهم الگوریتم دامنه آن است. دو نوع اصلی سفارش وجود دارد:

    • مرتب سازی داخلیروی آرایه هایی کار می کند که به طور کامل در RAM با دسترسی تصادفی به هر سلولی قرار می گیرند. داده ها معمولاً در همان مکان سفارش داده می شوند، بدون هزینه اضافی.
      • صفحه بندی حافظه و کش کردن به طور گسترده ای در معماری کامپیوترهای شخصی مدرن استفاده می شود. الگوریتم مرتب‌سازی باید با الگوریتم‌های ذخیره و جابجایی مورد استفاده به خوبی کار کند.
    • مرتب سازی خارجیبا دستگاه‌های ذخیره‌سازی بزرگ کار می‌کند، اما با دسترسی نه تصادفی، بلکه به صورت متوالی (ترتیب فایل)، یعنی در حال حاضر فقط یک عنصر را می‌بینیم و هزینه‌های برگشت به عقب در مقایسه با حافظه به طور غیرمنطقی زیاد است. این برخی محدودیت‌های اضافی را بر روی الگوریتم اعمال می‌کند و منجر به روش‌های سفارشی خاص می‌شود که معمولاً از فضای دیسک اضافی استفاده می‌کنند. علاوه بر این، دسترسی به داده ها در رسانه بسیار کندتر از عملیات با RAM است.
      • دسترسی به رسانه به صورت متوالی انجام می شود: در هر لحظه از زمان، تنها عنصری که به دنبال عنصر فعلی است قابل خواندن یا نوشتن است.
      • حجم داده ها به آنها اجازه نمی دهد که در RAM قرار بگیرند.

    الگوریتم ها نیز بر اساس:

    • نیاز به حافظه اضافی یا کمبود آن
    • نیاز به دانش در مورد ساختار داده ها که فراتر از عملیات مقایسه است یا فقدان آن

    لیست الگوریتم های مرتب سازی

    در این جدول nتعداد رکوردهایی است که باید مرتب شوند و کتعداد کلیدهای منحصر به فرد است.

    الگوریتم های مرتب سازی مداوم

    • مرتب سازی حبابی مرتب سازی حبابی) - پیچیدگی الگوریتم: O( n 2)؛ برای هر جفت شاخص، در صورتی که عناصر مرتب نباشند، مبادله انجام می شود.
    • مرتب‌سازی تکان‌دهنده (شیکر، مرتب‌سازی کوکتل، مرتب‌سازی حبابی دو طرفه) - پیچیدگی الگوریتم: O( n 2)
    • مرتب سازی درج - پیچیدگی الگوریتم: O( n 2)؛ مشخص کنید که عنصر فعلی باید کجا در لیست مرتب شده باشد و آن را در آنجا وارد کنید
    • مرتب‌سازی بلوکی (مرتب‌سازی سبد، مرتب‌سازی سطلی) - پیچیدگی الگوریتم: O( n) O( ک) حافظه و دانش اضافی در مورد ماهیت داده های مرتب شده، که فراتر از توابع "بازآرایی" و "مقایسه" است.
    • مرتب سازی شمارش - پیچیدگی الگوریتم: O( n+ک) O( n+ک) حافظه اضافی (3 گزینه در نظر گرفته شده)
    • مرتب سازی ادغام - پیچیدگی الگوریتم: O( nورود به سیستم n) O( n) حافظه اضافی؛ نیمه اول و دوم لیست را جداگانه بسازید و سپس لیست های مرتب شده را ادغام کنید
    • مرتب سازی ادغام در محل - پیچیدگی الگوریتم: O( n 2) O( nثبت 2 n) یا O( nورود به سیستم n) بسته به الگوریتم ادغام مورد استفاده.
    • مرتب سازی درخت دودویی - پیچیدگی الگوریتم: O( nورود به سیستم n) O( n) حافظه اضافی
    • مرتب سازی دیجیتال (مرتب سازی بر اساس شاخه، مرتب سازی کبوتر) - پیچیدگی الگوریتم: O( n+ک) O( ک) حافظه اضافی
    • مرتب سازی گنوم - پیچیدگی الگوریتم: O( n 2)

    الگوریتم های مرتب سازی ناپایدار

    • مرتب سازی انتخاب - پیچیدگی الگوریتم: O( n 2)؛ پیدا کردن کوچکترین یا بزرگترین عنصر و قرار دادن آن در ابتدا یا انتهای یک لیست مرتب شده
    • مرتب سازی پوسته - پیچیدگی الگوریتم: O( nثبت 2 n) تلاش برای بهبود مرتب سازی درج
    • مرتب سازی شانه ای - پیچیدگی الگوریتم: O( nورود به سیستم n)
    • مرتب‌سازی پشته (Heap Sort، Heapsort) - پیچیدگی الگوریتم: O( nورود به سیستم n) لیست را به یک پشته تبدیل کنید، بزرگترین عنصر را بردارید و آن را به انتهای لیست اضافه کنید
    • Smoothsort - پیچیدگی الگوریتم: O( nورود به سیستم n)
    • مرتب سازی سریع - پیچیدگی الگوریتم: O( nورود به سیستم n) - زمان متوسط، O( n 2) - بدترین حالت؛ به طور گسترده ای به عنوان سریع ترین شناخته شده برای سفارش لیست های تصادفی بزرگ شناخته می شود. با تقسیم مجموعه داده های اصلی به دو نیمه به طوری که هر عنصر نیمه اول نسبت به هر عنصر نیمه دوم مرتب شود. سپس الگوریتم به صورت بازگشتی برای هر نیمه اعمال می شود
    • Introsort - پیچیدگی الگوریتم: O( nورود به سیستم n) ترکیبی از مرتب سازی سریع و مرتب سازی پشته ای. Heapsort زمانی استفاده می شود که عمق بازگشت از log(n) بیشتر باشد.
    • مرتب سازی صبر - پیچیدگی الگوریتم: O( nورود به سیستم n + ک) بدترین حالت است، به O اضافی نیاز دارد( n + ک) حافظه، همچنین طولانی ترین دنباله افزایشی را پیدا می کند
    • مرتب سازی مبادله ای - پیچیدگی الگوریتم: O( n· ک) O( ک) حافظه اضافی

    الگوریتم های مرتب سازی غیر عملی

    • بوگوسورت - O( n· n!) میانگین. به طور خودسرانه آرایه را به هم بزنید، ترتیب را بررسی کنید.
    • مرتب سازی جایگشت - O( n· n!) - بدترین زمان. انواع جایگشت های آرایه اصلی تولید می شوند و ترتیب صحیح برای هر کدام بررسی می شود.
    • نوع احمقانه - O( n 3)؛ نسخه بازگشتی به O اضافی نیاز دارد n 2) حافظه
    • مرتب سازی مهره-O( n) یا O(√ n
    • مرتب سازی پنکیک - O( n) به سخت افزار تخصصی نیاز دارد

    الگوریتم هایی که بر اساس مقایسه نیستند

    • مرتب‌سازی بلوکی (مرتب‌سازی سبد، مرتب‌سازی سطلی)
    • مرتب‌سازی واژگانی یا ریشه‌ای (مرتب‌سازی ریشه)
    • مرتب سازی شمارش

    سایر الگوریتم های مرتب سازی

    همچنین ببینید

    • پیچیدگی خازنی الگوریتم
    • مرتب سازی شبکه ها (مقایسه)
    • مقایسه
    • دگرگونی شوارتز
    • مرتب سازی موازی

    ادبیات

    • دونالد کنوت The Art of Computer Programming جلد 3. Sorting and Searching = The Art of Computer Programming, vol.3. مرتب سازی و جستجو - ویرایش دوم - M.: "Williams"، 2007. - S. 824. - ISBN 0-201-89685-0
    • توماس اچ. کورمن، چارلز آی. لیزرسون، رونالد ال. ریوست، کلیفورد استاینالگوریتم ها: ساخت و تحلیل = مقدمه ای بر الگوریتم ها. - ویرایش دوم - M.: "Williams"، 2006. - S. 1296. - ISBN 0-07-013151-1
    • رابرت سجویکالگوریتم های بنیادی در C. مبانی/ساختارهای داده/مرتب سازی/جستجو. - سنت پترزبورگ: DiaSoftYUP، 2003. - S. 672. - ISBN 5-93772-081-4

    پیوندها

    • مقایسه متحرک الگوریتم های مرتب سازی

    بنیاد ویکی مدیا 2010 .

    ببینید «روش‌های مرتب‌سازی» در فرهنگ‌های دیگر چیست:

      طبقه بندی کلاس- طبقه بندی محصول کنترل شده در یک محدوده یا در چندین محدوده از ویژگی های مورد نیاز مانند سختی، ترکیب مواد یا ابعاد. [سیستم آزمایش غیر مخرب. انواع (روش ها) و فناوری تست های غیر مخرب ... کتابچه راهنمای مترجم فنی

      GOST R ISO 14644-3-2007: اتاق های تمیز و محیط های کنترل شده مرتبط. بخش 3. روش های تست- اصطلاحات GOST R ISO 14644 3 2007: اتاق های تمیز و محیط های کنترل شده مرتبط. بخش 3. روش های تست

      GOST R ISO 2859-5-2009: روش های آماری. رویه‌های کنترل انتخابی بر مبنای جایگزین. بخش 5: سیستم پلان ترتیبی مبتنی بر AQL برای کنترل لات های سریال- اصطلاحات GOST R ISO 2859 5 2009: روش های آماری. رویه‌های کنترل انتخابی بر مبنای جایگزین. قسمت 5. سیستم پلان ترتیبی مبتنی بر AQL برای کنترل دسته های متوالی سند اصلی: 3.36 ... ... فرهنگ لغت - کتاب مرجع شرایط اسناد هنجاری و فنی

      این اصطلاح معانی دیگری دارد، به تریاژ (معانی) مراجعه کنید. تریاژ در فرانسه، جنگ جهانی اول. توالت طبی ... ویکی پدیا

      - (Selection sort) الگوریتم مرتب سازی. می توان آن را هم به عنوان پایدار و هم به عنوان ناپایدار اجرا کرد. در آرایه‌ای از n عنصر، بدترین حالت، متوسط ​​و بهترین حالت زمان اجرای Θ(n2) دارد، با فرض اینکه مقایسه‌ها به صورت ثابت انجام شوند... ویکی‌پدیا

    مجموعه ای از اشیاء به ترتیب معین مرتب سازی در تمام زمینه های برنامه نویسی بدون استثنا مورد استفاده قرار می گیرد، چه پایگاه های داده یا برنامه های ریاضی.

    الگوریتم مرتب سازیالگوریتمی برای مرتب کردن مجموعه ای از عناصر است. معمولاً الگوریتم مرتب سازی به معنای الگوریتمی برای مرتب کردن مجموعه ای از عناصر به ترتیب صعودی یا نزولی است.

    اگر عناصری با مقادیر یکسان وجود داشته باشد، در یک دنباله مرتب شده آنها به هر ترتیبی در کنار یکدیگر قرار می گیرند. با این حال، گاهی اوقات حفظ ترتیب اصلی عناصر با مقادیر یکسان مفید است.

    در الگوریتم های مرتب سازی، تنها بخشی از داده ها به عنوان استفاده می شود کلید مرتب سازی. کلید مرتب سازییک صفت (یا چندین ویژگی) نامیده می شود که مقدار آن ترتیب عناصر را تعیین می کند. بنابراین، هنگام نوشتن الگوریتم‌هایی برای مرتب‌سازی آرایه‌ها، باید در نظر داشت که کلید به طور کامل یا جزئی با داده‌ها منطبق است.

    الگوریتم تبدیل آرایه به هرم (ساخت هرم). اجازه دهید یک آرایه x,x,...,x[n] داده شود.

    مرحله 1. k=n/2 را تنظیم کنید.

    مرحله 2. عناصر آرایه را از راست به چپ برای i=k,k-1,...,1 حلقه بزنید. اگر نابرابری‌های x i > x 2i، x i > x 2i+1 برآورده نشدند، جایگشت‌های x i را با بزرگ‌ترین نوادگان تکرار می‌کنیم. جایگشت ها زمانی تکمیل می شوند که نابرابری های x i > x 2i , x i > x 2i+1 ارضا شوند.

    الگوریتم مرتب سازی پشته.

    آرایه ای n بعدی را در نظر بگیرید که هرم x,x,...,x[n] را نشان می دهد.

    مرحله 1. عناصر x و x[n] را تعویض کنید.

    مرحله 2. n=n-1 را تعیین کنید. این معادل این واقعیت است که عنصر x[n] از بررسی بیشتر در آرایه حذف شده است.

    مرحله 3. آرایه x,x,...,x را در نظر بگیرید که با حذف آخرین عنصر از آرایه اصلی به دست می آید. این آرایه به دلیل جایگشت عناصر دیگر هرمی نیست. اما چنین آرایه ای به راحتی می تواند به یک هرم تبدیل شود. این با تکرار جایگشت مقدار عنصر از x با بزرگترین فرزندان حاصل می شود. این جایگشت تا زمانی ادامه می یابد که عنصری از x به جای عنصر x[i] قرار گیرد و نابرابری های x[i] > x، x[i] > x برآورده شوند. این یک جدید را تعریف می کند