1、所有排序类型
直接插入排序 折半插入排序 2路插入排序 希尔排序 快速排序 简单选择排序 树形选择排序 堆排序 归并排序 多关键字排序 链式基数排序
2、直接插入排序
//begin
for (int i = 1; i < 10; i++) {
int temp = a[i];
for(int j = i-1; j>=0; j--){
if(a[j] > temp){ //将大于a[i]的数往后移动,并且记录将要插入的位置,j+1为要插入的位置
a[j+1] = a[j];
if(j == 0){ //如果j == 0,直接插入a[i]的值
a[j] = temp;
break;
}
}
else{ //插入a[i]的值
a[j+1] = temp;
break;
}
}
}
//end
3、折半插入排序
//begin
for (int i = 1; i < 10; i++) {
int temp = a[i];
int low = 0, high = i - 1, m;
while (low <= high) { //折半查找到位置,为high+1
m = (low + high) / 2;
if (temp > a[m])
low = m + 1;
else
high = m - 1;
}
for (int j = i - 1; j >= high + 1; j--) { //将数据后移
a[j + 1] = a[j];
}
a[high + 1] = temp; //插入未排序的数据
}
//end
4、2路插入排序
//begin
int dq[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
int dh[10] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
dq[0] = a[0]; dh[0] = a[0];
int dqn = 0, dhn = 0;
for (int i = 1; i < 10; i++) {
int temp = a[i];
if (a[i] < a[0]) {
int j = dqn;
while (dq[j] != 0 && j>=0) {
if (temp < dq[j]) {
dq[j + 1] = dq[j];
j--;
}
else
break;
}
dq[j + 1] = temp;
dqn++;
}
else {
int j = dhn;
while (dh[j] != 0 && j >= 0) {
if (temp < dh[j]) {
dh[j + 1] = dh[j];
j--;
}
else
break;
}
dh[j + 1] = temp;
dhn++;
}
}
//end
5、希尔排序
6、快速排序
7、简单选择排序
8、树形选择排序
9、堆排序
10、归并排序
11、多关键字排序
12、链式基数排序
13、10种排序的比较
转载于:https://www.cnblogs.com/lijia-1998/p/9231883.html