saberziaei
پنج شنبه 28 اردیبهشت 1396, 22:44 عصر
عزیزان سلام
اگه بخواهیم در الگوریتم merge sort بجای اینکه آرایه به 2 قسمت تقسیم شود بیایم یک عدد بگیریم از کاربر آرایه به اون تعداد تقسیم بشه و باقیه مراحلش انجام بشه چجوری میشه کدش؟
برای توضیح بیشتر مثلا کاربر عدد 3 را وارد کند.بعد آرایه به سه قسمت تقسیم شود.
اگه امکانش هست کسی کدشو بنویسه کامل
این کد merge sort .دوستان بفرمایید کجاشو و چگونه باید تغییر داد تا به این موضوعی که گفتم برسم
using System;
using System.Collections.Generic;
using System.Text;
namespace sortMerge
{
class mergeSort
{
// array of integers to hold values
private int[] a = new int[100];
private int[] b = new int[100];
// number of elements in array
private int x;
// Merge Sort Algorithm
public void sortArray()
{
m_sort(0, x - 1);
}
public void m_sort(int left, int right)
{
int mid;
if (right > left)
{
mid = (right + left) / 2;
m_sort(left, mid);
m_sort(mid + 1, right);
merge(left, mid + 1, right);
}
}
public void merge(int left, int mid, int right)
{
int i, left_end, num_elements, tmp_pos;
left_end = mid - 1;
tmp_pos = left;
num_elements = right - left + 1;
while ((left <= left_end) && (mid <= right))
{
if (a[left] <= a[mid])
{
b[tmp_pos] = a[left];
tmp_pos = tmp_pos + 1;
left = left + 1;
}
else
{
b[tmp_pos] = a[mid];
tmp_pos = tmp_pos + 1;
mid = mid + 1;
}
}
while (left <= left_end)
{
b[tmp_pos] = a[left];
left = left + 1;
tmp_pos = tmp_pos + 1;
}
while (mid <= right)
{
b[tmp_pos] = a[mid];
mid = mid + 1;
tmp_pos = tmp_pos + 1;
}
for (i = 0; i < num_elements; i++)
{
a[right] = b[right];
right = right - 1;
}
}
public static void Main()
{
// Instantiate an instance of the class
mergeSort mySort = new mergeSort();
Console.WriteLine(" \n ************ WWW.SourceCodes.ir ************ ");
Console.WriteLine("__________________________________________________ _");
// Get the number of elements to store in the array
Console.Write("\n Number of elements in the array (less than 100) : ");
string s = Console.ReadLine();
mySort.x = Int32.Parse(s);
// Array header
Console.WriteLine("");
Console.WriteLine("-----------------------");
Console.WriteLine(" Enter array elements ");
Console.WriteLine("-----------------------");
// Get array elements
for (int i = 0; i < mySort.x; i++)
{
Console.Write("<{0}> ", i + 1);
string s1 = Console.ReadLine();
mySort.a[i] = Int32.Parse(s1);
}
// Sort the array
mySort.sortArray();
// Output sorted array
Console.WriteLine("");
Console.WriteLine("-----------------------");
Console.WriteLine(" Sorted array elements ");
Console.WriteLine("-----------------------");
for (int j = 0; j < mySort.x; j++)
{
Console.WriteLine(mySort.a[j]);
}
// Here to stop app from closing
Console.WriteLine("\n\nPress Return to exit.");
Console.Read();
}
}
}
اگه بخواهیم در الگوریتم merge sort بجای اینکه آرایه به 2 قسمت تقسیم شود بیایم یک عدد بگیریم از کاربر آرایه به اون تعداد تقسیم بشه و باقیه مراحلش انجام بشه چجوری میشه کدش؟
برای توضیح بیشتر مثلا کاربر عدد 3 را وارد کند.بعد آرایه به سه قسمت تقسیم شود.
اگه امکانش هست کسی کدشو بنویسه کامل
این کد merge sort .دوستان بفرمایید کجاشو و چگونه باید تغییر داد تا به این موضوعی که گفتم برسم
using System;
using System.Collections.Generic;
using System.Text;
namespace sortMerge
{
class mergeSort
{
// array of integers to hold values
private int[] a = new int[100];
private int[] b = new int[100];
// number of elements in array
private int x;
// Merge Sort Algorithm
public void sortArray()
{
m_sort(0, x - 1);
}
public void m_sort(int left, int right)
{
int mid;
if (right > left)
{
mid = (right + left) / 2;
m_sort(left, mid);
m_sort(mid + 1, right);
merge(left, mid + 1, right);
}
}
public void merge(int left, int mid, int right)
{
int i, left_end, num_elements, tmp_pos;
left_end = mid - 1;
tmp_pos = left;
num_elements = right - left + 1;
while ((left <= left_end) && (mid <= right))
{
if (a[left] <= a[mid])
{
b[tmp_pos] = a[left];
tmp_pos = tmp_pos + 1;
left = left + 1;
}
else
{
b[tmp_pos] = a[mid];
tmp_pos = tmp_pos + 1;
mid = mid + 1;
}
}
while (left <= left_end)
{
b[tmp_pos] = a[left];
left = left + 1;
tmp_pos = tmp_pos + 1;
}
while (mid <= right)
{
b[tmp_pos] = a[mid];
mid = mid + 1;
tmp_pos = tmp_pos + 1;
}
for (i = 0; i < num_elements; i++)
{
a[right] = b[right];
right = right - 1;
}
}
public static void Main()
{
// Instantiate an instance of the class
mergeSort mySort = new mergeSort();
Console.WriteLine(" \n ************ WWW.SourceCodes.ir ************ ");
Console.WriteLine("__________________________________________________ _");
// Get the number of elements to store in the array
Console.Write("\n Number of elements in the array (less than 100) : ");
string s = Console.ReadLine();
mySort.x = Int32.Parse(s);
// Array header
Console.WriteLine("");
Console.WriteLine("-----------------------");
Console.WriteLine(" Enter array elements ");
Console.WriteLine("-----------------------");
// Get array elements
for (int i = 0; i < mySort.x; i++)
{
Console.Write("<{0}> ", i + 1);
string s1 = Console.ReadLine();
mySort.a[i] = Int32.Parse(s1);
}
// Sort the array
mySort.sortArray();
// Output sorted array
Console.WriteLine("");
Console.WriteLine("-----------------------");
Console.WriteLine(" Sorted array elements ");
Console.WriteLine("-----------------------");
for (int j = 0; j < mySort.x; j++)
{
Console.WriteLine(mySort.a[j]);
}
// Here to stop app from closing
Console.WriteLine("\n\nPress Return to exit.");
Console.Read();
}
}
}