#include using namespace std;
void swap(int &x,int &y)
}/insertsort
void insertsort(int* a,int n)
a[j+1] = temp;
} }}//bubble sort 下沉
void bubblesort1(int *a, int n)
} if (!flag)
}}//bubblesort 上浮
void bubblesort2(int* a,int n)
} if (!flag)
}}//bubblesort 雙向
void bubblesort3(int* a, int low,int high)
if (a[right] < a[right-1])
}high--;
low++; }}
//selectsort
void selectsort(int* a,int n)
} if (minindex != i)
}}//quicksort
int partition(int* a,int low, int high)
a[i] = privot;
return i;
}void quicksort(int* a,int low, int high)
}//mergesort
//將有二個有序數列a[first...mid]和a[mid...last]合併。
void mergearray(int a, int first, int mid, int last, int temp)
while (i <= m)
temp[k++] = a[i++];
while (j <= n)
temp[k++] = a[j++];
for (i = 0; i < k; i++)
a[first + i] = temp[i];
}void mergesort(int a, int first, int last, int temp)
}bool mergesort(int a, int n)
//heapsort 大根堆 從小到大排序
void maxheapfixdown(int* a,int i,int n)//n為節點總數,二叉堆編號從0開始,i的父節點是 (i-1)/2 左孩子 2*i +1 右孩子 2*i +2
if (a[j] <= temp)
a[i] = a[j];
i = j;
j = 2*i + 1;
} a[i] = temp;
}void makemaxheap(int*a, int n)
}void maxheapsort(int *a,int n)
}//binaryinsertsort
void binaryinsertsort(int* a, int n)
else
}for (int j = i-1; j>=low; j--)
a[low] = current;
} }}
int main()
// insertsort(a,n);
//bubblesort1(a,n);
//bubblesort2(a,n);
//bubblesort3(a,0,n-1);
//selectsort(a,n);
//quicksort(a,0,n-1);
//mergesort(a,n);
//makemaxheap(a,n);
//maxheapsort(a,n);
binaryinsertsort(a,n);
for (int i = 0; i < n; i++)
return 0;
}
各種內部排序的比較
各種內部排序按所採用的基本思想 策略 可分為 插入排序 交換排序 選擇排序 歸併排序和基數排序,它們的基本策略分別是 1 插入排序 依次將無序序列中的乙個記錄,按關鍵字值的大小插入到已排好序乙個子串行的適當位置,直到所有的記錄都插入為止。具體的方法有 直接插入 表插入 2 路插入和shell排序。2...
實驗5各種內部排序演算法
各種內部排序演算法 實現直接插入排序演算法 希爾排序 快速排序演算法 直接選擇排序演算法,並用main函式測試。include typedef struct recordtype recordtype void directinsersort recordtype r,int n 直接插入排序 r ...
詳談內部排序之各種插入排序
如上圖的插入撲克牌就是生活中最常見的插入排序。直接插入排列過程 先將序列中第 1 個記錄看成是乙個有序子串行,然後從第 2 個記錄開始,逐個進行插入,直至整個序列有序。例題 為直接插入排序的詳細過程,其中有一些注意事項 1 資料中有兩個49,其中乙個加粗,用來判斷這兩個49的前後順序是否發生變化,然...