老熟女激烈的高潮_日韩一级黄色录像_亚洲1区2区3区视频_精品少妇一区二区三区在线播放_国产欧美日产久久_午夜福利精品导航凹凸

重慶分公司,新征程啟航

為企業提供網站建設、域名注冊、服務器等服務

【數據結構】常見的7種比較排序算法1-創新互聯

● 直接插入排序(Insert Sort)

為企業提供成都網站設計、做網站、網站優化、成都全網營銷推廣、競價托管、品牌運營等營銷獲客服務。創新互聯公司擁有網絡營銷運營團隊,以豐富的互聯網營銷經驗助力企業精準獲客,真正落地解決中小企業營銷獲客難題,做到“讓獲客更簡單”。自創立至今,成功用技術實力解決了企業“網站建設、網絡品牌塑造、網絡營銷”三大難題,同時降低了營銷成本,提高了有效客戶轉化率,獲得了眾多企業客戶的高度認可!

1、算法描述:

  該算法是一種簡單直觀的是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入。插入排序在實現上只需用到O(1)的額外空間的排序,因而在從后向前掃描過程中,需要反復把已排序元素逐步向后挪位為最新元素提供插入空間。

2、步驟:

1)從第一個元素開始,該元素可以認為已經被排序

2)取出下一個元素,在已經排序的元素序列中從后向前掃描

3)如果該元素(已排序)大于新元素,將該元素移到下一位置

4)重復步驟3,直到找到已排序的元素小于或者等于新元素的位置

5)將新元素插入到該位置中

6)重復步驟2

  插入排序在對幾乎已經排好序的數據操作時,效率高,即可以達到線性排序的效率,但插入排序一般來說是低效的, 因為插入排序每次只能將數據移動一位。

具體實現如下:

void InsertSort(int *arr, size_t size)//直接插入排序
{
 assert(arr);
 for (size_t i = 0; i < size - 1; ++i)
 {
  int end = i;
  int tmp = arr[i + 1];//tmp取出要插入的元素(下一個元素)
  while (end >= 0 && arr[end] > tmp)//end要大于等于0
  {
   arr[end + 1] = arr[end];//大于tmp的數后移
   --end;
  }
  arr[end + 1] = tmp;
 }
}

● 希爾排序(Shell Sort)

1、算法描述:

  希爾排序,也稱遞減增量排序算法,是插入排序的一種高速而穩定的改進版本。希爾排序是基于插入排序而提出改進方法的。設置增量為gap=size/3+1,在gap不為1時,希爾排序是在進行預排序,在gap==1時,進行插入排序時,可提高效率。

2、步驟:

1)設置增量gap為size

2)使gap=gap/3+1,同時對所有組進行插入排序,直到size-gap-1時,表示所有組已經排序完成

3)重復步驟2,直到gap為1時停止

【數據結構】常見的7種比較排序算法1

具體實現如下:

void ShellSort(int *arr, size_t size)//希爾排序
{
 assert(arr);
 int gap = size;//gap設置插入排序區間
 while (gap > 1)
 {
  gap = gap / 3 + 1;//防止gap為2時,下一次gap為1,使得最后一次的gap為1
  //例如(2 5 4 9 3 6 8 7 1)使多組同時進行直接插入排序
  for (size_t i = 0; i < size - gap; ++i)
  {
   int end = i;
   int tmp = arr[i + gap];
   while (end >= 0 && arr[end] > tmp)
   {
    arr[end + gap] = arr[end];
    end -= gap;
   }
   arr[end + gap] = tmp;
  }
 }
}

● 選擇排序(Select Sort)

1、算法描述:

  首先在未排序序列中找到最小和大元素,存放到排序序列的兩端,然后,再從剩余未排序元素中繼續尋找最小和大元素,然后放到排序序列(該序列縮短了2個元素,不包含原序列的兩端)兩端。以此類推,直到所有元素均排序完畢。

2、步驟:

1)一重循環:通過i和size控制進行尋找最小和大元素的區間

2)使min為區間的首位元素位置,max為區間的末尾元素位置

3) 二重循環:從序列中尋找最小和大元素,注意在進行不斷比較過程中進行交換,不能在找到的它們的下標后才進行交換。

具體實現如下:

void SelectSort(int *arr, size_t size)
{
 int min, max;
 for (size_t i = 0; i < size; ++i, --size)
 {
  min = i;
  max = size - 1;//max為當前選擇排序段的最后一個數據
  //max = size - 1 - i時:注意不能用size進行減1,防止max=size-i-i中size的改變,重新定義len進行變化
  for (int j = i; j <= max; ++j)
  {
   if (arr[j] < arr[min])
   {
    swap(arr[j], arr[min]);
   }
   if (arr[j] > arr[max])
   {
    swap(arr[j], arr[max]);
   }
  }
 }
}

● 堆排序(Heap Sort)

1、算法描述:

  堆積排序(Heapsort)是指利用堆這種數據結構所設計的一種排序算法。堆是一個近似完全二叉樹的結構,并同時滿足堆性質:即子結點的鍵值或索引總是小于(或者大于)它的父節點。

  升序序列的實現需要建立大堆,降序序列的實現需要建立小堆。下面對升序序列的實現進行分析。

2、步驟:

1)大堆的建立:通過下調建立大堆,先比較左右子結點的大小,使child指向較大數,再比較父親結點的child所指數據的大小,小于孩子結點就進行交換。

2)每次使堆的左右子樹為大堆,故從下向上進行大堆的建立

3)交換堆頂元素的堆的最后一個元素,然后重新使堆(不包含最后一個元素)成為大堆

4)重復步驟3,直到堆中只有一個元素為止

具體實現如下:

void AdjustDown(int* arr, size_t parent, size_t size)//建大堆(每次選出大的放在后面)
{
 size_t child = 2 * parent + 1;
 while (child < size)
 {
  if (child + 1 < size && arr[child + 1] > arr[child])
  {
   ++child;
  }
  if (arr[child] > arr[parent])
  {
   swap(arr[child], arr[parent]);
   parent = child;
   child = 2 * parent + 1;
  }
  else
  {
   break;
  }
 }
}
void HeapSort(int *arr, size_t size)//升序(大堆),降序(小堆)
{
 assert(arr);
 for (int i = (size - 2) / 2; i >= 0; --i)//注意邊界條件,i>=0和i=(size-2)/2
 {
  AdjustDown(arr, i, size);
 }
 for (size_t i = 0; i < size; ++i)
 {
  swap(arr[0], arr[size - 1 - i]);//交換,使大數放在堆的最后
  AdjustDown(arr, 0, size - 1 - i);
 }
}

● 冒泡排序(Bubble Sort)

1、算法描述:

  重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤(升序的)就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換(flag==0),也就是說該數列已經排序完成。該算法是越小的元素會經由交換慢慢“浮”到數列的頂端。

2、步驟:

1)設置標志flag。

2)從開始第一對到結尾的最后一對,比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

3)如果flag==0,則在進行一趟比較后沒有發生交換,則序列已經有序了。

4)持續每次對越來越少的元素重復步驟2、3,總共進行了size-1趟。

具體實現如下:

void BubbleSort(int *arr, size_t size)//冒泡排序,依次將大數據存放在后面
{
 assert(arr);
 int flag = 0;//標志位判斷數組是否接近有序
 for (size_t i = 0; i < size - 1; ++i)//進行了size-1趟冒泡
 {
  for (size_t j = 0; j < size - i - 1; ++j)//進行比較,交換
  {
   if (arr[j] > arr[j + 1])
   {
    swap(arr[j], arr[j + 1]);
    flag = 1;
   }
  }
  if (flag == 0)//一趟結束后沒有一次交換,跳出循環
  {
   break;
  }
 }
}

其余比較排序算法的實現見博主的下一篇博文

創新互聯www.cdcxhl.cn,專業提供香港、美國云服務器,動態BGP最優骨干路由自動選擇,持續穩定高效的網絡助力業務部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統配攻擊溯源,準確進行流量調度,確保服務器高可用性。佳節活動現已開啟,新人活動云服務器買多久送多久。


網站欄目:【數據結構】常見的7種比較排序算法1-創新互聯
文章出自:http://www.xueling.net.cn/article/djipop.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP
主站蜘蛛池模板: onlyfans是个什么平台 | 国产在线欧美日韩精品一区 | 国产精品一区二区国产主播 | 久久亚洲色WWW成人男男 | 国产真实乱子伦精品视频 | 国产精品精品久久 | 日日久视频 | 久久99精品国产麻豆婷婷 | 成人三级在线 | 国产三级欧美三级 | 中文字幕人成高清 | 免费在线观看污网站 | 亚洲一级毛片视频 | 日本熟妇人妻中出 | 一级做a爰片性色毛片 | 99精品热播 | 99热这里是精品 | 婷婷一区二区三区 | 国产激情不卡 | 精品成人免费一区二区不卡 | 人妻熟妇AV水蜜桃一区二区三区 | 国语自产拍在线观看7m | 国产a一级无码毛片一区二区三区 | 国产精品网红尤物福利在线观看 | 天天色天天色天天色 | 亚洲一区精品视频在线观看 | 日本伦奷在线播放 | 看曰本女人大战黑人视频 | 亚洲成人免费影院 | 99国产精品久久久久久久成人热 | 国产精品久久久久久久久免费看 | 国产性精品 | 亚洲欧美日韩国产成人精品影院 | 两个男人吮她的花蒂和奶水视频 | 色黄大色黄女片免费中国 | 国产麻豆高潮流白浆喷水免费网站 | 亚洲日产av中文字幕 | 香蕉欧美成人精品A∨在线观看 | 蜜桃精品成人影片 | 午夜色大片在线观看免费 | 国产乱淫a∨片免费观看 |