package sort; /** * æå ¥æåºãå¨ååºåä¸æé¡ºåºæ¿å¼ï¼æ¾å ¥æåºåä¸ï¼ä»åå¾åéä¸ï¼æ¯è¾æ¾å°æå ¥ä½ç½® *
* æ¯è¾æ¬¡æ°ï¼[N-1, N^2/4, N^2/2] å¯ä»¥éè¿äºåæ¥æ¾åå°
* 交æ¢ç³»æ°ï¼[0, N^2/4, N^2/2] æ¯ä¸ªæå
¥ä½ç½®åçæ°è¦å¨æ¯è¾ä¸éä¸åç§»ï¼æ
å¯ä»¥éè¿é¾è¡¨å®ç°åå°äº¤æ¢æ¬¡æ°
* ç¨³å®æ§ï¼ç¨³å®
* ç¹ç¹ï¼1.éåé¨åæåºææ¯å°è§æ¨¡çæ°ç»
* 2.设æ°ç»ä¸åç½®çæ°é为 Mï¼æ°ç»å¤§å°ä¸º Nï¼åéäº¤æ¢æ¬¡æ° = Mï¼M <= éæ¯è¾æ¬¡æ° <= M+N-1ï¼
* éç¨åºæ¯ï¼
* ä¼åï¼äºåæå
¥æåº
*
* @author YiJie 2017/6/4
**/
public class InsertSort extends Sort {
@Override
public void sort(Comparable[] list) {
for (int i = 1; i < list.length; i++) {
for (int j = i; j > 0; j--) {//åj-1个çåæåºæ°ç»ï¼æ¯è¶ælist[i]å å
¥è¿ä¸ªæåºæ°ç»ä¸
if (less(list[j], list[j - 1])) {
exch(list, j, j - 1);
} else {
break;//list[j]
* ç¨³å®æ§ï¼ä¸ç¨³å®
*
* @author YiJie 2017/6/4
**/
class ShellSort extends Sort {
@Override
public void sort(Comparable[] list) {
}
}
* ç¨³å®æ§ï¼ç¨³å®
* éç¨åºæ¯ï¼nè¾å¤§çæ åºåºå
*
* @author YiJie 2017/6/4
**/
class BinaryInsertSort extends Sort {
/**
* å°næå
¥[0,n-1]æ°ç»ï¼æ¯è¾log2 N次æ¹
* @param list ä¸éå®æåºæ°ç»æå±ç±»åï¼åªè¦å®æ¯ä¸ä¸ªComparableå®ç°ç±»
*/
@Override
public void sort(Comparable[] list) {
for (int i = 0, length = list.length; i < length - 1; i++) {
for (int low = 0, high = i, mid = (low + high) / 2; ; mid = (low + high) / 2) {
System.out.println("high =" + high + " low = " + low);
if (low == mid) {//æ¾å°æå
¥ä½ç½®
System.out.println((i + 1) + "æ¢å°" + (mid));
for (int j = i; j >= mid; j--) {
exch(list, j + 1, j);//æj+1åä¸éæ¥äº¤æ¢ï¼æå°mid+1
}
break;
}
if (less(list[i + 1], list[mid])) {
high = (mid - 1) < 0 ? 0 : mid - 1;
} else {
low = mid + 1;
}
}
showStep(i, list);
}
}
}
/**
* å¸å°æåº/å¢ééåæåºãæå
¥æåºçä¸ç§é«éè稳å®çæ¹è¿çæ¬
* æå
¥æåºå¨å¯¹å ä¹å·²ç»æå¥½åºçæ°æ®æä½æ¶ï¼æçé«ï¼å³å¯ä»¥è¾¾å°çº¿æ§æåºçæçï¼ä½å¯¹ä¹±åºçåºåï¼æå
¥æåºæ¯æ¬¡åªè½ç§»å¨ä¸å°æ¥ã
* å¸å°æåºä¼ç¨è¾å¤§çæ¥é¿ç§»å¨æ°æ®ï¼å¨åæéæ¥å°åºå徿åºé è¿
*