package sort; /** * Created by ozc on 2018/3/15. * * @author ozc * @version 1.0 */ public class InsertSort { public static void main(String[] args) { int[] arrays = {9, 8, 1, 4, 2, 3, 5, 6, 7, 13, 12, 14, 11, 15, 16, 17, 19, 18, 10}; sort2(arrays); System.out.println(arrays); } /** * æå ¥æåºæ®éç * @param arrays */ public static void sort(int[] arrays) { //int[] arrays = {3, 2, 1, 3, 3}; /* //第ä¸è¶æåº-------------------- int temp; if (arrays[1] > arrays[0]) { //å¦æç¬¬äºä¸ªæ°æ¯ç¬¬ä¸ä¸ªæ°å¤§ï¼ç´æ¥è·ä¸ } else { //å¦æç¬¬äºä¸ªæ°æ¯ç¬¬ä¸ä¸ªæ°å°ï¼å°ç¬¬ä¸ä¸ªæ°åéä¸ä¸ªä½ç½®(å°ç¬¬äºä¸ªæ°æè¿å») temp = arrays[1]; arrays[1] = arrays[0]; arrays[0] = temp; } System.out.println("å ¬ä¼å·Java3y" + arrays); //第äºè¶æåº-------------------- if (arrays[2] > arrays[1]) { //å¦æç¬¬ä¸ä¸ªæ°æ¯ç¬¬äºä¸ªæ°å¤§ï¼ç´æ¥è·ä¸ } else { //å¦æç¬¬ä¸ä¸ªæ°æ¯ç¬¬äºä¸ªæ°å°ï¼å°ç¬¬äºä¸ªæ°å¾åéä¸ä¸ªä½ç½®ï¼è®©ç¬¬ä¸ä¸ªæ°è·ç¬¬ä¸ä¸ªæ°æ¯ temp = arrays[2]; arrays[2] = arrays[1]; //å¦æç¬¬ä¸ä¸ªæ°æ¯ç¬¬ä¸ä¸ªå¤§ï¼é£å°±æå ¥å°ç¬¬äºä¸ªæ°ä¸ if (temp > arrays[0]) { arrays[1] = temp; } else { //å¦æç¬¬ä¸ä¸ªæ°æ¯ç¬¬ä¸ä¸ªå°ï¼å°ç¬¬ä¸ä¸ªæ°æå ¥å°ç¬¬ä¸ä¸ªæ°åé¢ int swapTemp = arrays[0]; arrays[0] = temp; arrays[1] = swapTemp; } } System.out.println("å ¬ä¼å·Java3y" + arrays);*/ //临æ¶åé int temp; //å¤å±å¾ªç¯æ§å¶éè¦æåºçè¶æ°(ä»1å¼å§å 为å°ç¬¬0ä½çæäºæåºæ°æ®) for (int i = 1; i < arrays.length; i++) { temp = arrays[i]; //妿åä¸ä½(å·²æåºçæ°æ®)æ¯å½åæ°æ®è¦å¤§ï¼é£ä¹å°±è¿å ¥å¾ªç¯æ¯è¾[åè第äºè¶æåº] int j = i - 1; while (j >= 0 && arrays[j] > temp) { //å¾åéä¸ä¸ªä½ç½®ï¼è®©å½åæ°æ®ä¸ä¹ååä½è¿è¡æ¯è¾ arrays[j + 1] = arrays[j]; //䏿å¾åï¼ç´å°éåºå¾ªç¯ j--; } //éåºäºå¾ªç¯è¯´ææ¾å°äºåéçä½ç½®äºï¼å°å½åæ°æ®æå ¥åéçä½ç½®ä¸ arrays[j + 1] = temp; } System.out.println("å ¬ä¼å·Java3y" + arrays); } /** * äºåæå ¥æåº:æå ¥å°æåºçä½ç½®æ¶ï¼ä½¿ç¨äºåæ³æ¥æ¾åºå¯¹åºçindexï¼é¿å 夿¬¡ç§»å¨ * @param arrays */ public static void sort2(int[] arrays) { //临æ¶åé int temp; //å¤å±å¾ªç¯æ§å¶éè¦æåºçè¶æ°(ä»1å¼å§å 为å°ç¬¬0ä½çæäºæåºæ°æ®) for (int i = 1; i < arrays.length; i++) { //äºåæ¥æ¾æ¾åºåéçæå ¥ä½ç½® int index = BinarySearchIndex(arrays, i - 1, arrays[i]); //妿䏿¯ç´æ¥æå ¥ï¼é£ä¹å°±è¦ç§»å¨ä½ç½®äº if (index != i) { temp = arrays[i]; int j; // åç§»å ç´ ï¼è ¾åºarr[index]ä½ç½® for (j = i - 1; j >= index && j >= 0; j--) { arrays[j + 1] = arrays[j]; } arrays[j + 1] = temp; } } System.out.println("å ¬ä¼å·Java3y" + arrays); } private static int BinarySearchIndex(int[] arr, int maxIndex, int data) { //å®ä¹ä¸ä¸ªæéï¼åå«ä¸ºå¾ æ¥æ¾åºåç两端åä¸å¿ä½ç½®ï¼è¿ä¸ªå¯¹åºçæ¯æåºåºç大å°ï¼ä¸æ¯ æ´ä¸ªæ°ç» int left = 0; int right = maxIndex; int mid; //åªè¦å·¦è¾¹åå³è¾¹æéæ²¡ç¸æï¼é£ä¹å°±å¯ä»¥æ¾ while (left <= right) { //åä¸é´æ° mid = (left + right) / 2; //æ¯ä¸é´æ°å¤§çæè çäºä¸é´æ°ï¼å¾å³è¾¹æ¾ if (data >= arr[mid]) { //è¿éå æ¬äºçäºçæ åµ--->妿çäºï¼è§æ +1ï¼é£ä¹åæ¯ç´æ¥æå ¥ left = mid + 1; } else { //æ¯ä¸é´æ°å°çï¼å¾å·¦è¾¹æ¾ right = mid - 1; } } //è§æ ç¸æäºæç»æå¾ªç¯.. return left; } }