排序有內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存,排序作為最常用的演算法之一掌握幾種最常用的是有必要的。
基本思想:用第乙個數字和所有數字比較替換,因為替換的是第i個數字所以就繼續比較就好。
public void sort
0(intvalues)}}
}
基本思想:用相鄰的兩個值一直比較,一次下來最後一位數 就會得到最大或者最小的值
public void sort00(intvalues)}}
}
基本思想:類似於一張一張插入撲克牌,每插一張牌順序都是排好的。
public
void
sort1(intvalues)else
}values[j]=temp; //把temp的填入}}
基本思想: 乙個從左向右查詢(尋找大於temp的值),乙個從右向左查詢各(尋找小於temp的值)一次。注意:temp是取的第乙個值即是左邊的值,所以從右邊先開始。
左邊開始大於temp的值放入右邊(下標j),右邊開始小於temp的值放入左邊(下標i)。
一次下來的效果就會是 temp左邊的值比temp小,temp右邊的值比temp大;
一次下來的效果: temp-1,temp-4,temp-n,temp,temp+n,temp+2,temp+4 以temp為中心分為兩半
//一次操作的演算法
public
intsort2(intvalues,int start,int end)
if(i==j)
j--;
}//從左向右 ---->
while(true)
if(i==j)
i++;}}
values[i]=temp; //這部很關鍵 要把當初得到的值回填。
return i;
}//把分下來的左右兩邊進行遞迴運算(一種分治的思想)
public
void
go(intarray,int start,int end)
int middle = sort2(array, start, end);
go(array, start, middle-1);//左邊的(底值)
go(array, middle+1, end); //右邊的 (高值)
}
個人認為當資料量較大時採用快速排序最好,而資料量較小時什麼排序簡單就按什麼來唄反正資料量小。 常用的排序
直接排序,堆排序,歸併排序,氣泡排序,快速排序,基數排序,桶式排序,直接插入排序,折半插入排序,shell排序,雞尾酒排序,鴿巢排序,二叉樹排序,b 樹排序 氣泡排序 兩兩比較待排序資料元素的大小,發現兩個資料元素的次序相反時即進行交換,直到沒有反序的資料元素為止。演算法時間複雜度是o n 2 選擇...
最常用的排序 快速排序
是一種不浪費空間又可以快一點的排序演算法。假設對 6 1 2 7 9 3 4 5 10 8 這10個數進行排序。首先在這個序列裡隨便找乙個數作為基準數。為了方便,讓6作為基準數,將這個序列中所有比基準數大的數放在6的右邊,比基準數小的數放在6的左邊。方法 分別從初始序列 6 1 2 7 9 3 4 ...
最常用的排序 快速排序
相對於桶排序,節省了空間,相對於氣泡排序,節省了時間,可謂是兩者兼顧的一種更優化的演算法 實現 假設有 初始序列 6 1 2 7 9 3 4 5 10 8 那麼從初始序列的兩端開始探測。先從右往左找到乙個比6小的數,然後在從左往右找到乙個比6大的數,然後交換他們。6 1 259 3 4710 8 這...