冒泡排序、選擇排序歸、并排序是三種最基礎的排序。在一些其他排序算法中也會有用到
冒泡排序
兩層循環(huán),兩兩比較,使之對比的數(shù)據(jù)越來越少,每次篩選出一個最大或者最小的數(shù)。
void SortManager::bubbleSort(int *a,int len)
{
int max = len-1;
int i,j;
for (i = 0; i < max; i++)
{
for (j = 0;j< max - i; j++)
{
if (a[j+1] < a[j])
{
swap(a, j, j+1);
}
}
}
printArr(a, len);
}
選擇排序
兩層循環(huán),內(nèi)層循環(huán)每次選出一個最大數(shù)的序號,放到數(shù)組最后
void SortManager::selectionSort(int *arr,int n)
{
printf("選擇排序\n");
for (int i = 0; i<n; i++) {
int minIndex = i;
for (int j = i + 1; j<n; j++) {
//printf("%d",arr[j]);
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
swap(arr[i], arr[minIndex]);
}
printArr(arr, n);
}
插入排序
從第二個數(shù)據(jù)開始,依次往前比較,若比前一個數(shù)小,則與之交換。若比前一個大,則代表比前面的數(shù)都小停止這層循環(huán)。進入下一次循環(huán)。
void SortManager::insertionSort(int *arr,int len)
{
printf("\n------------插入排序-----------\n");
for (int i = 1; i < len; i++) {
for (int j = i; j>0; j--) {
if (arr[j] < arr[j-1]) {
swap(arr[j], arr[j-1]);
}else{
break;
}
}
}
printArr(arr, len);
printf("\n------------插入排序-----------\n");
}