//2.後移元素,空出插入位置(插入位置下標為low或high+1)
for(j = i-1; j >= low; j--)
//3.插入元素 (此時low=high+1)
a[low] = current;
}};與直接插入排序相比,減少了元素的比較次數。每次迴圈,都是先找到插入位置,再來移動元素,而不是比較一次移動乙個元素。
一次迴圈比較log(n)次,則n次迴圈比較nlog(n)次。一次迴圈移動1~n次,則n次迴圈移動n平方次。
void swap(int &a, int &b)
void insertsort(int a, int n)
}if(flag == false)
} };
int partition(int a, int low, int high)
a[low] = pivot;//哨兵元素的最終存放位置
return low;
}void quicksort(int a, int low, int high)
};
排序 排序演算法整理
經常零零散散的用到排序演算法,將幾類常見的總結下來 時間複雜度o n 2 空間複雜度o 1 穩定排序 param arr public static void insersort int arr else arr j 1 tmp 氣泡排序 時間複雜度 o n 2 空間複雜度o 1 穩定排序 para...
排序演算法整理
template void cinsertsort mysort function compare template void cselectsort mysort function compare swap datas i datas id void cshellsort mysort funct...
排序演算法整理
先把常用排序演算法進行分類 插入排序 直接插入排序 折半插入排序 希爾排序 交換排序 氣泡排序 快速排序 選擇排序 簡單選擇排序 堆排序 歸併排序 基數排序 下面我們乙個乙個來看 1.直接插入排序 進行n 1趟排序,每趟把乙個元素插入到前面已經排好序的序列中,其時間複雜度為o n 並且由於判斷要插入...