改良版插入排序

2021-08-01 23:16:11 字數 945 閱讀 7314

我們來看一下插入排序定義:

插入排序是由未排序的後半部前端取出乙個值,插入已排序前半部的適當位置,概念簡單但速度不快。

改良版的插入排序是讓後一次的排序進行時,盡量利用前一次排序後的結果,以加快排序的速度,shell排序法即是基於此概念來改良插入排序法。

解法:

假設要排序的元素有n個,則每次進行插入排序時並不是所有的元素同時進行,而是取一段間隔。

首先將間隔設為n/2,然後跳躍進行插入排序,然後將間隔n/4,跳躍進行排序動作,再來間隔設定為n/8、n/16,直到間隔為1之後的最後一次排序終止,因為上一次的排序動作都會將固定間隔內的元素排序號,所以當間隔越來越小時,某些元素正確位置機率越高,因此最後幾次的排序動作將大幅度減低。

**實現:
#include#include#include#definemax10

#defineswap(x,y)

void shellsort(int);

intmain(void);

inti;

srand(time(null));

printf("排序前: ");

for(i = 0;i< max;i++)

shellsort(number);

return 0;

}void shellsort(intnumber)

else

break;}}

}printf("\ngap = %d: ",gap);

for(i = 0;i< max;i++)

printf("%d ",number[i]);

printf("\n");

gap/= 2;

}}

改良插入排序

說明 插入排序法由未排序的後半部分前端取出乙個值,插入已排序前半部分的適當位置,概念簡單但速度不快。排序要加快的基本原則之一,是讓後一次的排序進行時,盡量利用前一次排序後的結果,以加快排序的速度,shell排序法即是基於此一概念來改良 插入排序法。解法 略 include include inclu...

Shell排序(改良的插入排序)

shell排序演算法最初是由d.l shell於1959年提出,假設要排序的元素有n個,則每個進行插入排序是並不是所偶的元素同時進行,而是去一段間隔。shell首先將間隔設定為n 2,然後跳躍的進行插入排序,再來將間隔設定為n 4,跳躍進行排序動作,再來設定時間間隔為n 8 n 16,知道間隔為1之...

WinForm 標尺和網格 改良版

using system using system.collections.generic using system.componentmodel using system.drawing using system.drawing.drawing2d using system.data using ...