Задачи По Программированию (Шурыгин В. Н.)
.docxСортировка выбором. Содержимое итерации: Выбирается минимальный элемент в массиве и запоминается. Затем на его место записывается «очень большое число», например, максимальное +1. Сам элемент переносится в новый массив.
#define N 10
const int MAX=2147483647;
using namespace std;
void sort(int mas[],int s[], int n)
{
for(int i=0;i<n;i++)
{
int min=mas[0];
int index=0;
for(int j=1;j<n;j++)
if(mas[j]<min)
{
min=mas[j];
index=j;
}
s[i]=min;
mas[index]=MAX;
}
}
int main(int argc, char *argv[])
{
printf("Vvedite massiv iz %d chisel\n",N);
int a[N];
int b[N];
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
sort(a,b,N);
printf("Otsortirovannye massiv\n");
for(int i=0;i<N;i++)
printf("%d ",b[i]);
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
Сортировка выбором. Содержимое итерации: Выбирается максимальный элемент (из оставшихся еще не отсортированными) и меняется с последним из них. (Обратить внимание на изменяющийся диапазон неупорядоченной части).
#define N 10
using namespace std;
void sort(int mas[], int n)
{
for(int i=n-1;i>0;i--)
{
int max=mas[0];
int index=0;//индекс max числа
for(int j=1;j<=i;j++)
if(max<mas[j])
{
max=mas[j];
index=j;
}
if(index!=i)
{
int temp;
temp=mas[index];
mas[index]=mas[i];
mas[i]=temp;
}
}
}
int main(int argc, char *argv[])
{
printf("Vvedite massiv iz %d chisel\n",N);
int a[N];
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
sort(a,N);
printf("Otsortirovannye massiv\n");
for(int i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
Сортировка выбором. Содержимое итерации: Выбирается максимальный элемент (из оставшихся еще не отсортированными) и меняется с первым из них. (Обратить внимание на изменяющийся диапазон неупорядоченной части).
#define N 10
using namespace std;
void sort(int mas[], int n)
{
for(int i=0;i<n-1;i++)
{
int max=mas[i];
int index=i;//индекс max числа
for(int j=i+1;j<n;j++)
if(max<mas[j])
{
max=mas[j];
index=j;
}
if(index!=i)
{
int temp;
temp=mas[index];
mas[index]=mas[i];
mas[i]=temp;
}
}
}
int main(int argc, char *argv[])
{
printf("Vvedite massiv iz %d chisel\n",N);
int a[N];
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
sort(a,N);
printf("Otsortirovannye massiv\n");
for(int i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;
}
Сортировка подсчетом. Содержимое итерации: Выходной массив заполняется значениями “-1”. Затем для каждого элемента определяется его место в выходном массиве путем подсчета количества элементов строго меньших данного. Естественно, что все одинаковые элементы попадают на одну позицию, за которой следует ряд значений “-1”. После чего оставшиеся в выходном массиве позиции со значением “-1” заполняются копией предыдущего значения.
#define N 10
using namespace std;
void sort(int mas[],int s[], int n)
{
for(int i=0;i<n;i++)
s[i]= -1;
for(int i=0;i<n;i++)
{
int c=0;
for(int j=0;j<n;j++)
if(mas[j]<mas[i])
c++;
s[c]=mas[i];
}
for(int i=1;i<n;i++)
if(s[i]==-1)
s[i]=s[i-1];
}
int main(int argc, char *argv[])
{
printf("Vvedite massiv iz %d chisel\n",N);
int a[N];
int b[N];
for(int i=0;i<N;i++)
scanf("%d",&a[i]);
sort(a,b,N);
printf("Otsortirovannye massiv\n");
for(int i=0;i<N;i++)
printf("%d ",b[i]);
printf("\n");
system("PAUSE");
return EXIT_SUCCESS;