Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Задачи По Программированию (Шурыгин В. Н.)

.docx
Скачиваний:
9
Добавлен:
07.10.2014
Размер:
15.07 Кб
Скачать

Сортировка выбором. Содержимое итерации: Выбирается минимальный элемент в массиве и запоминается. Затем на его место записывается «очень большое число», например, максимальное +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;