Данный отчёт сгенерирован 04.04.2023 06:21:13 UTC.
HTML версия (этот сайт) сгенерирован 04.04.2023 06:21:31 UTC.
Коммит: [bfeb65b9] add automatic zip creation 04.04.2023 06:21:13
HTML версия (этот сайт) сгенерирован 04.04.2023 06:21:31 UTC.
Коммит: [bfeb65b9] add automatic zip creation 04.04.2023 06:21:13
Задача: Часткове Сортування
04.04.2023 06:21:13
Описание: Записати на С# алгоритм часткового сортування у вигляді статичного методу PartSort.
Метод отримує цілий масив та межі, в яких слід проводити часткове сортування.
Вибраним елементом є лівий елемент сортованої області. Метод повертає
місце вибраного елемента у відсортованій області.
04.04.2023 06:21:13
Решений: 27
04.04.2023 06:21:13
Часткове Сортування
04.04.2023 06:21:13
static int PartSort(int[] arr, int left, int right)
{
int pivot = arr[left];
int i = left + 1;
int j = right;
while (true)
{
while (i <= j && arr[i] <= pivot)
i++;
while (i <= j && arr[j] >= pivot)
j--;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
else
{
break;
}
}
int pos = j;
arr[left] = arr[pos];
arr[pos] = pivot;
return pos;
}
static int PartSort(int[] array, int left, int right) {
int target = array[left];
int length = right - left + 1;
int index = left;
for (int i = 1; i < length; i++) {
for (int j = length - 1; j >= i; j--) {
if (array[left + j] > array[left + j - 1]) continue;
if (left + j == index) {
index--;
} else if (left + j - 1 == index) {
index++;
}
int temp = array[left + j - 1];
array[left + j - 1] = array[left + j];
array[left + j] = temp;
}
}
return index;
}
static int PartSort(int[] arr, int stP, int endP) {
var el = arr[stP];
Array.Sort(arr, stP, endP - stP);
return Array.IndexOf(arr, el);
}
static int PartSort(int[] arr, int start, int fin){
int place = start;
fin--;
while(true){
while (arr[start]<=arr[place]) start++;
while (arr[fin]>arr[place]) fin--;
if (start < fin) Change(start, fin);
else break;
}
Change(fin, place);
return fin;
void Change(int s, int f){
int temp=arr[s];
arr[s]=arr[f];
arr[f]=temp;
}
}
static int PartSort(int[] arr, int a, int b)
{
static void Change(int i,int j, int[] arr)
{
int t = arr[i]; arr[i] = arr[j]; arr[j] = t;
}
// позиція опорного елемента
int p = a;
b--;
while (true)
{
while (arr[a] <= arr[p]) a++;
while (arr[b] > arr[p]) b--;
if (a < b)
Change(a,b,arr);
else
break;
}
Change(b,p,arr);
return b;
}
static int PartSort(int[] arr, int left, int rigth)
{
static void change(int a, int b, int[] arr)
{
int y = arr[a];
arr[a] = arr[b];
arr[b] = y;
}
int p = left;
rigth--;
while(true)
{
while(arr[left]<=arr[p]) left++;
while(arr[rigth]> arr[p]) rigth--;
if(left< rigth)
{
change(left,rigth,arr);
}
else
{
break;
}
}
change(rigth, p,arr);
return rigth;
}
static int PartSort(int[] arr, int b1, int b2)
{
int tmp;
for (int i = b1; i < b2; i++)
{
for (int j = i + 1; j < b2; j++)
{
if (arr[i] > arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
tmp = arr[b1];
return tmp;
}
static int PartSort(int[] arr, int start, int end)
{
int a = start;
int temp;
end--;
while (true)
{
while (arr[start] <= arr[a]) start++;
while (arr[end] >= arr[a]) end--;
if (start < end)
{
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
else
break;
}
temp = arr[end];
arr[end] = arr[a];
arr[a] = temp;
return a;
}
static int PartSort( int[] arr, int r, int l)
{
for(int i=l+1; i<=r; i++)
{
int elm = arr[i];
while(arr[i]< arr[i - 1])
{
int p = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = p;
}
}
return arr[l];
}
static int PartSort(int[] arr, int a,int b){
Array.Sort(arr,a,b);
return arr[a];
}
static int PartSort(int[] arr, int low, int high)
{
int pivot = arr[low];
int i = low;
int j = high;
while (i < j)
{
while (i <= high && arr[i] <= pivot)
i++;
while (arr[j] > pivot)
j--;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[low] = arr[j];
arr[j] = pivot;
return j;
}
static int PartSort(int[] arr, int left, int right)
{
int pivot = arr[left];
int i = left + 1;
int j = right;
while (i <= j)
{
while (i <= j && arr[i] <= pivot) i++;
while (i <= j && arr[j] > pivot) j--;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int pivotIndex = left;
if (arr[left] > arr[j])
{
arr[left] = arr[j];
arr[j] = pivot;
pivotIndex = j;
}
return pivotIndex;
}
static int PartSort(int[] arr, int s, int e) {
int p = s;
int tmp;
while(true) {
while(arr[s] <= arr[p]) s++;
while(arr[e] > arr[p]) e--;
if(s < e) {
tmp = arr[s];
arr[s] = arr[e];
arr[e] = tmp;
} else {
break;
}
}
return e;
}
static int PartSort(int[] array, int a1, int a2){
return 0;
}
public static int PartSort(int[] arr, int left, int right)
{
int pivotIndex = left;
int pivotValue = arr[left];
for (int i = left + 1; i <= right; i++)
{
if (arr[i] < pivotValue)
{
pivotIndex++;
Swap(arr, i, pivotIndex);
}
}
Swap(arr, left, pivotIndex);
return pivotIndex;
}
private static void Swap(int[] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
static int PartSort(int[] arr, int a, int b) {
Array.Sort(arr, a, b);
return arr[a];
}
static int PartSort(int[] arr, int left, int right)
{
int pivot = arr[left];
int i = left + 1;
for (int j = left + 1; j <= right; j++)
{
if (arr[j] < pivot)
{
Swap(ref arr[i], ref arr[j]);
i++;
}
}
Swap(ref arr[left], ref arr[i - 1]);
return i - 1;
}
static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
static int PartSort(int[] arr, int left, int right){
int[] new_arr = new int[right-left+1];
int elem = arr[left];
int counter = 0;
for(int i = left; i < right; i++){
new_arr[counter] = arr[i];
counter++;
}
Array.Sort(new_arr, (x, y) => x.CompareTo(y));
return Array.IndexOf(new_arr, elem);
}
static int PartSort(int[] arr, int lcr, int rcr){
int val = arr[lcr];
int[] arr2 = new int[rcr-lcr+1];
for(int i = 0; i<= rcr-lcr; i++){
arr2[i] = arr[lcr+i];
}
Array.Sort(arr2);
for(int i = 0; i< arr2.Length; i++){
if(arr2[i] == val) return i;
}
return 0;
}
static int PartSort(int[] arr, int left, int right)
{
int pos = left;
right--;
while (left < right)
{
while (arr[left] <= arr[pos]) {left++;}
while (arr[right] > arr[pos]) {right--;}
int temp = arr[right];
arr[right] = arr[left];
arr[left] = temp;
}
int t = arr[right];
arr[right] = arr[pos];
arr[pos] = t;
return right;
}
static void swap(ref int a, ref int b)
{
var temp = a;
a = b;
b = temp;
}
static int PartSort(int []arr, int l, int r)
{
for (int i = l; i <= r; i++)
{
for(int j = r; j >i; j--)
{
if (arr[j] < arr[j-1]) swap(ref arr[j],ref arr[j-1]);
}
}
return arr[l];
}
static int PartSort(int[] arr, int left, int right) {
int res = 0;
for (int i = left; i <= right; i++)
if (arr[i] < arr[left]) res++;
return res;
}
static int PartSort(int[] structures, int firstIndex, int lastIndex){
for (int i = firstIndex; i < lastIndex-1; i++)
{
if (structures[i] < structures[i+1])
{
int tmp= structures[i];
structures[i]= structures[i+1];
structures[i+1]= tmp;
}
}
return structures[firstIndex];
}
static int PartSort(int[] arr,int a,int b){
int res=0;
for(int i=a;i<=b;i++){
if(arr[i]< arr[a]){
res++;
}
}
return res;
}
static int PartSort(int[] arr, int a,int b){
Array.Sort(arr,a,b);
return arr[a];
}
public static int PartSort(int[] arrey, int start, int end)
{
int len = arrey.Length;
int variable;
int result = arrey[start];
while ( len > 0)
{
for (int i = start; i < end; i++)
{
if (arrey[i] > arrey[i + 1])
{
variable = arrey[i];
arrey[i] = arrey[i + 1];
arrey[i+1] = variable;
}
}
len --;
}
return Array.IndexOf(arrey, result);
}
static int PartSort(int[] arr, int lcr, int rcr){
int val = arr[lcr];
int[] arr2 = new int[rcr-lcr+1];
for(int i = 0; i<= rcr-lcr; i++){
arr2[i] = arr[lcr+i];
}
Array.Sort(arr2);
for(int i = 0; i< arr2.Length; i++){
if(arr2[i] == val) return i;
}
return 0;
}
{
int pivot = arr[left];
int i = left + 1;
int j = right;
while (true)
{
while (i <= j && arr[i] <= pivot)
i++;
while (i <= j && arr[j] >= pivot)
j--;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
else
{
break;
}
}
int pos = j;
arr[left] = arr[pos];
arr[pos] = pivot;
return pos;
}
int target = array[left];
int length = right - left + 1;
int index = left;
for (int i = 1; i < length; i++) {
for (int j = length - 1; j >= i; j--) {
if (array[left + j] > array[left + j - 1]) continue;
if (left + j == index) {
index--;
} else if (left + j - 1 == index) {
index++;
}
int temp = array[left + j - 1];
array[left + j - 1] = array[left + j];
array[left + j] = temp;
}
}
return index;
}
var el = arr[stP];
Array.Sort(arr, stP, endP - stP);
return Array.IndexOf(arr, el);
}
int place = start;
fin--;
while(true){
while (arr[start]<=arr[place]) start++;
while (arr[fin]>arr[place]) fin--;
if (start < fin) Change(start, fin);
else break;
}
Change(fin, place);
return fin;
void Change(int s, int f){
int temp=arr[s];
arr[s]=arr[f];
arr[f]=temp;
}
}
{
static void Change(int i,int j, int[] arr)
{
int t = arr[i]; arr[i] = arr[j]; arr[j] = t;
}
// позиція опорного елемента
int p = a;
b--;
while (true)
{
while (arr[a] <= arr[p]) a++;
while (arr[b] > arr[p]) b--;
if (a < b)
Change(a,b,arr);
else
break;
}
Change(b,p,arr);
return b;
}
{
static void change(int a, int b, int[] arr)
{
int y = arr[a];
arr[a] = arr[b];
arr[b] = y;
}
int p = left;
rigth--;
while(true)
{
while(arr[left]<=arr[p]) left++;
while(arr[rigth]> arr[p]) rigth--;
if(left< rigth)
{
change(left,rigth,arr);
}
else
{
break;
}
}
change(rigth, p,arr);
return rigth;
}
{
int tmp;
for (int i = b1; i < b2; i++)
{
for (int j = i + 1; j < b2; j++)
{
if (arr[i] > arr[j])
{
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
tmp = arr[b1];
return tmp;
}
{
int a = start;
int temp;
end--;
while (true)
{
while (arr[start] <= arr[a]) start++;
while (arr[end] >= arr[a]) end--;
if (start < end)
{
temp = arr[start];
arr[start] = arr[end];
arr[end] = temp;
}
else
break;
}
temp = arr[end];
arr[end] = arr[a];
arr[a] = temp;
return a;
}
{
for(int i=l+1; i<=r; i++)
{
int elm = arr[i];
while(arr[i]< arr[i - 1])
{
int p = arr[i];
arr[i] = arr[i - 1];
arr[i - 1] = p;
}
}
return arr[l];
}
Array.Sort(arr,a,b);
return arr[a];
}
{
int pivot = arr[low];
int i = low;
int j = high;
while (i < j)
{
while (i <= high && arr[i] <= pivot)
i++;
while (arr[j] > pivot)
j--;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
arr[low] = arr[j];
arr[j] = pivot;
return j;
}
{
int pivot = arr[left];
int i = left + 1;
int j = right;
while (i <= j)
{
while (i <= j && arr[i] <= pivot) i++;
while (i <= j && arr[j] > pivot) j--;
if (i < j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
int pivotIndex = left;
if (arr[left] > arr[j])
{
arr[left] = arr[j];
arr[j] = pivot;
pivotIndex = j;
}
return pivotIndex;
}
int p = s;
int tmp;
while(true) {
while(arr[s] <= arr[p]) s++;
while(arr[e] > arr[p]) e--;
if(s < e) {
tmp = arr[s];
arr[s] = arr[e];
arr[e] = tmp;
} else {
break;
}
}
return e;
}
return 0;
}
{
int pivotIndex = left;
int pivotValue = arr[left];
for (int i = left + 1; i <= right; i++)
{
if (arr[i] < pivotValue)
{
pivotIndex++;
Swap(arr, i, pivotIndex);
}
}
Swap(arr, left, pivotIndex);
return pivotIndex;
}
private static void Swap(int[] arr, int i, int j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
Array.Sort(arr, a, b);
return arr[a];
}
{
int pivot = arr[left];
int i = left + 1;
for (int j = left + 1; j <= right; j++)
{
if (arr[j] < pivot)
{
Swap(ref arr[i], ref arr[j]);
i++;
}
}
Swap(ref arr[left], ref arr[i - 1]);
return i - 1;
}
static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
int[] new_arr = new int[right-left+1];
int elem = arr[left];
int counter = 0;
for(int i = left; i < right; i++){
new_arr[counter] = arr[i];
counter++;
}
Array.Sort(new_arr, (x, y) => x.CompareTo(y));
return Array.IndexOf(new_arr, elem);
}
int val = arr[lcr];
int[] arr2 = new int[rcr-lcr+1];
for(int i = 0; i<= rcr-lcr; i++){
arr2[i] = arr[lcr+i];
}
Array.Sort(arr2);
for(int i = 0; i< arr2.Length; i++){
if(arr2[i] == val) return i;
}
return 0;
}
{
int pos = left;
right--;
while (left < right)
{
while (arr[left] <= arr[pos]) {left++;}
while (arr[right] > arr[pos]) {right--;}
int temp = arr[right];
arr[right] = arr[left];
arr[left] = temp;
}
int t = arr[right];
arr[right] = arr[pos];
arr[pos] = t;
return right;
}
{
var temp = a;
a = b;
b = temp;
}
static int PartSort(int []arr, int l, int r)
{
for (int i = l; i <= r; i++)
{
for(int j = r; j >i; j--)
{
if (arr[j] < arr[j-1]) swap(ref arr[j],ref arr[j-1]);
}
}
return arr[l];
}
int res = 0;
for (int i = left; i <= right; i++)
if (arr[i] < arr[left]) res++;
return res;
}
for (int i = firstIndex; i < lastIndex-1; i++)
{
if (structures[i] < structures[i+1])
{
int tmp= structures[i];
structures[i]= structures[i+1];
structures[i+1]= tmp;
}
}
return structures[firstIndex];
}
int res=0;
for(int i=a;i<=b;i++){
if(arr[i]< arr[a]){
res++;
}
}
return res;
}
Array.Sort(arr,a,b);
return arr[a];
}
{
int len = arrey.Length;
int variable;
int result = arrey[start];
while ( len > 0)
{
for (int i = start; i < end; i++)
{
if (arrey[i] > arrey[i + 1])
{
variable = arrey[i];
arrey[i] = arrey[i + 1];
arrey[i+1] = variable;
}
}
len --;
}
return Array.IndexOf(arrey, result);
}
int val = arr[lcr];
int[] arr2 = new int[rcr-lcr+1];
for(int i = 0; i<= rcr-lcr; i++){
arr2[i] = arr[lcr+i];
}
Array.Sort(arr2);
for(int i = 0; i< arr2.Length; i++){
if(arr2[i] == val) return i;
}
return 0;
}