Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //leftb - левый край( до куда надо идти в обртануб сторону)
- //rightb - правй край ( до куда надо идти по ходу сортировки )
- // запускается цикл девому краю даем индекс 0, а правому индекс i(в дальнейшем будет испльзоваться для проходки не с самого начала)
- //второй цикл идет до конца идет сравнение и если вдруг второе меньш первого то меняем местами, дойдя до конца массива, длине массива передается индекс который у нас записался в случае смены чисел (строка *), и правому краю тоже записывается индекс если была смена, если смены не было то записываются нули
- //дальше идет пробег справа налево (до этого шли слева направо) пробег идет до i и также идет сравнение, если вдруг происходит замена то мы дойдя до i снова пойдем слева направа, по факту это сортировка как качели, в конечном итоге она пройдет справа налево и закончится
- void bubblesort(unsigned long nel,
- int (*compare)(unsigned long i, unsigned long j),
- void (*swap)(unsigned long i, unsigned long j)) {
- unsigned long leftb, rightb, i = 0;
- nel = nel-1;
- while (i < nel) {
- leftb = 0;
- rightb = i;
- while(rightb < nel) {
- if (compare(rightb, rightb + 1) == 1) {
- swap(rightb, rightb + 1);
- leftb = rightb; //*
- }
- rightb = rightb + 1;
- }
- nel = leftb;
- rightb = leftb;
- while (rightb > i) {
- if (compare(rightb - 1, rightb) == 1) {
- swap(rightb - 1, rightb);
- leftb = rightb;
- }
- rightb = rightb - 1;
- }
- i = leftb;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement