日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

算法学习-常用排序

發(fā)布時(shí)間:2024/1/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法学习-常用排序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

他家都說(shuō):“程序員到最后比的是算法”,我對(duì)算法也算情有獨(dú)鐘,最近這些天,沒(méi)事的時(shí)候就看看算法相關(guān)的書,感覺(jué)還是算法能體現(xiàn)一個(gè)程序員的能力,今天學(xué)習(xí)了常用的排序算法,不好意思還是C#代碼:

?


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace SuanFa
{
public class SortMethod
{
//插入排序
//把數(shù)B與其前面的數(shù)比較,如果B比其前面的數(shù)C小,
//那么C到B之間的數(shù)都向后移一位,C所在的位置由B代替
public bool InsertSort(int[] A, int n)
{
int sortData;
for (int i = 1; i < n; i++)
{
sortData
= A[i];
for (int j = 0; j < i; j++)//循環(huán)一次只為插進(jìn)一個(gè)數(shù),循環(huán)n-1次即可
{
if (A[j] > sortData)
{
for (int k = i; k > j; k--)//j-i之間的數(shù)向后移一位
{
A[k]
= A[k - 1];
}
A[j]
= sortData;
break;//break在這里很重要,如果沒(méi)有break,你看看A[j]=sortData;就執(zhí)行了i-k次,
// 排序后就會(huì)出現(xiàn)同一個(gè)數(shù)出現(xiàn)多次,當(dāng)然有的數(shù)就去掉了。
}
}
}

return true;
}

//冒泡排序
public bool BubbleSort(int[] A, int n)
{
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i; j++)
{
if (A[j] > A[i])
{
int tmp = A[j];
A[j]
= A[i];
A[i]
= tmp;
}
}
}

return true;
}

//選擇排序
//把當(dāng)前要排序的那個(gè)數(shù)與它后面的數(shù)進(jìn)行比較,如果哪個(gè)數(shù)更小,就讓這個(gè)更小的輸入與后面的數(shù)進(jìn)行比較,
//一直比較下去,將當(dāng)前要排序的數(shù)與更小的那個(gè)數(shù)交換
public bool SelectSort(int[] A, int n)
{
for (int i = 0; i < n - 1; i++)
{
int k = i;
for (int j = i + 1; j < n; j++)
{
if (A[j] < A[k])
{
k
= j;
}
}

if (k != i)
{
int tmp = A[k];
A[k]
= A[i];
A[i]
= tmp;
}
}
return true;
}


#region 合并排序
/// <param name="A">被排序的數(shù)組</param>
/// <param name="l">開始排序的下標(biāo)</param>
/// <param name="r">結(jié)束排序的下標(biāo)</param>
/// <param name="n">數(shù)組最后一個(gè)元素的下標(biāo)</param>
private void Merge(int[] A, int e, int r, int n)
{
int n1 = r - e ;
int n2 = n - r+1;
int[] e1 = new int[n1];
int[] r1 = new int[n2];
for (int t = 0; t < n1; t++)
{
e1[t]
= A[e + t];
}
for (int t = 0; t < n2; t++)
{
r1[t]
= A[r + t];
}
int i = 0, j = 0, k = e;
while (i < n1 && j < n2)
{
if (e1[i] <= r1[j])
{
A[k
++] = e1[i++];
}
else
{
A[k
++] = r1[j++];
}
}
while (i < n1)
{
A[k
++] = e1[i++];
}
while (j < n2)
{
A[k
++] = r1[j++];
}
}

public void MergeSort(int[] A, int r, int n)
{
if (r < n)
{
int p=(n+r)/2;
MergeSort(A,r,p);
MergeSort(A,p
+1,n);
Merge(A,r,p,n);
}
}
#endregion

//合并兩個(gè)數(shù)組,合并排序的思想就是合并兩個(gè)數(shù)組
public int[] MergeTwo(int[] A, int[] B)
{
int n1 = A.Length;
int n2 = B.Length;
int[] C = new int[n1 + n2];
int i=0,j =0,k=0;
while (i < n1 && j < n2)
{
if (A[i] > B[j])
{
C[k
++] = B[j++];
}
else {
C[k
++] = A[i++];
}
}
while (i < n1)
{
C[k
++] = A[i++];
}

while (j < n2)
{
C[k
++] = B[j++];
}
return C;
}

//哈希算法

//老實(shí)說(shuō)這段代碼不是我寫的,哈希算法的確有點(diǎn)難懂,但我還是會(huì)他搞定
public void HillSort(int[] list)
{
int inc;
for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;

for (; inc > 0; inc /= 3)
{
for (int i = inc + 1; i <= list.Length; i += inc)
{
int t = list[i - 1];
int j = i;
while ((j > inc) && (list[j - inc - 1] > t))
{
list[j
- 1] = list[j - inc - 1];
j
-= inc;
}
list[j
- 1] = t;
}
}
}

}
}

轉(zhuǎn)載于:https://www.cnblogs.com/hlxs/archive/2010/11/21/2087986.html

總結(jié)

以上是生活随笔為你收集整理的算法学习-常用排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。