- •Методы сортировки
- •Методы сортировки разбивают на три категории:
- •Прямые методы:
- •Прямые методы:
- •Прямые методы:
- •Прямые методы:
- •Прямые методы:
- •Прямые методы:
- •Прямые методы:
- •Прямые методы:
- •Прямые методы сортировки
- •Улучшенные методы сортировки: Сортировка методом простого включения
- •Улучшенные методы сортировки: Сортировка методом простого включения
- •Улучшенные методы сортировки: Сортировка методом простого включения
- •Улучшенные методы сортировки: Сортировка методом простого включения
- •Улучшенные методы сортировки:
- •Сортировка методом простого
- •Улучшенные методы сортировки:
- •Эффективность методов
Методы сортировки
Методы сортировки разбивают на три категории:
Сортировка с помощью включения
Сортировка с помощью выбора
Сортировка с помощью обмена
Прямые методы:
Сортировка с помощью прямого включения
Элементы последовательности делятся на две части:
Уже упорядоченные
Элементы, которые необходимо упорядочить
На каждом шаге новый элемент вставляется в уже готовую последовательность, причем сразу на нужное место
7 |
9 |
7 2 4 8 5 |
7 9
17 |
2 |
4 8 5 |
|
1 2 7 |
|
4 8 5 |
|
|
1 2 4 7 |
|
8 5 |
1 2 4 7 8 |
5 |
||
1 2 4 |
7 |
8 |
Прямые методы:
Сортировка с помощью прямого включения
|
void insertion_sort(int a[],int n) |
|
1 |
{int i, j, x; |
n-1 |
for(i =2; i <=n; i ++) |
||
2 |
{ x:=a[i];a[0]=x; j=I; |
3*(n-1) |
3 |
while (x<a[j-1]) |
|
4{ a[j]=a[j-1]; j--; } 2+3+…..(n-1)
5 a[j]=x; (n-1)
}
} //end insertion_sort (3*(n-1)++(n-1))*(n-1)+(n+1)/2*(n-2)
Прямые методы:
Сортировка с помощью прямого включения
Улучшение метода: метод с двоичным включением:
Допустим необходимо вставить элемент ak.
Элементы a1, a2, … - уже упорядочены
Будем сравнивать элемент ak не со
всеми элементами, а сразу с серединой отрезка, до тех пор, пока не будет найдена точка включения
Прямые методы:
Сортировка с помощью прямого обмена («пузырьковая»)
Метод основывается на сравнении двух соседних элементов и смене их местами при необходимости, до тех пор, пока все элементы не будут упорядочены
1 2 3 5 4 6 7 8 9
1 2 3 4 5 6 7 8 9
1 3 3 5 6 2 4 11
1 3 3 5 2 4 6 11
1 3 3 2 4 5 6 11
1 3 2 3 4 5 6 11
1 2 3 3 4 5 6 11
1 2 3 3 4 5 6 11
1 2 3 3 4 5 6 11
Прямые методы:
Сортировка с помощью прямого обмена («пузырьковая»)
void Bubble_sort(int a[],int n)
{int i, j, x;
1 for(i =2; i <=n; i ++)
2 for(j=n;j<=i;j--)
3if (a[j-1]>a[j])
4{ x=a[j]; a[j]=a[j-1];a[j-1]=x;}
}//end Bubble_sort
Прямые методы:
Сортировка с помощью прямого обмена («пузырьковая»)
Улучшение метода:
1.Запомнить были ли сделаны перестановки за последний проход массива
2.Запомнить место где были сделаны последние перестановки
3.Последовательно чередовать проход массива в прямом и обратном направлении(«шейкерная»)