【C#】從小到大排序(25)


排序的算法
先做一個private static 方法 返回值是 int[]數組 
然后寫上OrderBy() ;
參數 數組(int[] array)也就是說你給我一個數組
我幫你排個序
private static int[] OrderBy(int[] array) ;
{
}

//不管這個數組有多少個元素
//這個算法是通用的,是所有的數組,只要是int[]數組,它都能用
//所以我們現在寫的是一個算法
//假設這個數組是2/8/6/1


private static int[] OrderBy(int[] array) ;
{
//第一個元素array[0], i從1開始,i<array.Length小於后面總長度, i++自增
for(int i=1;i<array.Length;i++ )
{
//用第一個array[0] 和后面的array[i]比,如果array[i]比array[0]小
//那么就交換
if(array[0] > array[i])
{
}
}
//用第二個(array[1])和后面對比取最小
for(int i=2; i<array.Length; i++ )
{
if(array[1] > array[i])
{
}
}
//用第三個(array[2])和后面對比取最小
for(int i=3; i<array.Length; i++ )
{
if(array[2] > array[i])
{
}
}
}

 

//因為內不循環要做三遍+
//所以再套一個for循環
//當前索引從0開始(int currentIndex = 0;)
//到哪里結束,倒數第二個(currentIndex< array.Length -1)
//currentIndex自增
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
for(int i=1;i<array.Length;i++ )
{
if(array[0] > array[i])
{
}
}
}

 

//需要與后面比較的元素
//邏輯需要當前的int currentIndex = 0,依次和后面比較
//那么就先取出第一個currentIndex = 0;和后面int i=currentIndex+1比
//再取出第二個,和2后面比;再取出第三個,再和3后面比.....
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{

//當前索引(currentIndex)和后面(currentIndex+1)/int i比較
for(int i=currentIndex+1; i<array.Length; i++ )
{

//當前索引(currentIndex)和后面比較
if(array[currentIndex] > array[i])
{

//如果.成立進行交換(當前元素大於被比較的元素)
//先明確誰array[currentIndex]跟誰array[i]交換
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}
}
}
//最后循環做完了,退出循環
return array;

 

 

private static int[] OrderBy(int[] array) ;
{
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
for(int i=currentIndex+1; i<array.Length; i++ )
{
if(array[currentIndex] > array[i])
{
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}
}
}
return array;
}

 

 

這種排序方法,性能上還能優化
這是一種最簡單,直觀的排序

 

private static int[] OrderBy(int[] array) ;
{
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
//記錄位置要在外層循環的里面,內層循環的外面
//在這里聲明一個變量(minIndex = i, i=currentIndex, int minIndex = currentIndex;)
int minIndex = currentIndex;

for(int i=currentIndex+1; i<array.Length; i++ )
{
if(array[currentIndex] > array[i])
{
//現在我們在這里記錄需要交換的索引[i],不做交換
minIndex = i;

}
}
//運行到這里內層for循環已經執行完畢
//根據比較結果進行交換,從而提高代碼效率

}
return array;
}

------------------------------------------

private static int[] OrderBy(int[] array) ;
{
//02....假設第一輪開始比較的時候
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{

//03....這里int currentIndex = 0,就是把0給了int minIndex
int minIndex = currentIndex;

//08....接下來第二次比較的時候
for(int i=currentIndex+1; i<array.Length; i++ )
{
//01....這里將array[currentIndex]修改成array[minIndex]
//04....這里array[minIndex]就變成了array[0]
//05....然后array[0]和后面array[i]去比
//06....如果一旦發現該交換了
//09....array[minIndex]就是上一次的[i]索引
//10....然后再去和后面array[i]去比
if(array[minIndex] > array[i])
{

//07....minIndex不做交換,而是把i存起來
//11....如果又發現,還要換
//12....再次把i存到minIndex里,
//13....至此根本沒有做過交換,什么時候再做交換呢?
minIndex = i;

}
}
//14....這里做交換
//15....需要做一個判斷minIndex不等於currentIndex,才做交換
if(minIndex != currentIndex)
{
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}

}
return array;
}

 

 

---------------

 

private static int[] OrderBy(int[] array) ;
{
for(int currentIndex = 0;currentIndex< array.Length -1;currentIndex++)
{
int minIndex = currentIndex;
for(int i=currentIndex+1; i<array.Length; i++ )
{
if(array[minIndex] > array[i])
{
minIndex = i;
}
}
if(minIndex != currentIndex)
{
int temp = array[currentIndex];
array[currentIndex]=array[i]
array[i] = temp;
}
}
return array;
}

 

 

int temp = array[currentIndex];
array[currentIndex]=array[minIndex]
array[minIndex] = temp;

 

 

這是冒泡排序法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM