1.排序
通常在排序的过程中需要进行两个基本操作:
(1)比较两个关键字的大小。(比较)
(2)将记录从一个位置移动到另一个位置。(交换)
选择排序:
//选择排序 从大到小 每次进行排序都找出最大或者最小的(具体看大到小还是小到大)
/*for (i = 0;i<MAX_SIZE;i++) {
for (j = i;j<MAX_SIZE;j++) {
if (num[i] < num[j]) {
temp = num[i];
num[i] = num[j];
num[j] = temp;
}
}
}*/
冒泡排序:
//冒泡排序 相邻元素之间的替换
//for (i = 0; i < MAX_SIZE; i++) {
// for (j =0; j < MAX_SIZE-i-1; j++) {
// if (num[j+1]>num[j]) {
// temp = num[j+1];
// num[j+1] = num[j];
// num[j] = temp;
// }
// }
//}
插入排序:
//插入排序 无序序列逐次按顺序插入到有序序列的排序
/*for (i = 0;i<10;i++) {
for (j = i - 1; j >= 0;j--) {
if (num[j + 1]< num[j])
{
temp = num[j + 1];
num[j + 1] = num[j];
num[j] = temp;
}
}
}*/
哈希排序:
//哈希排序(插入排序中的分组排序)增加了增量
/*int size = 10;
for (int grap =size/2;grap>0;grap/=2) {
for (i = grap;i<10;i+=grap) {
for (j=i-grap;j>=0;j--) {
if (num[j + grap] > num[j]) {
temp = num[j+grap];
num[j + grap] = num[j];
num[j] = temp;
}
}
}
}*/
快速排序:(重要)
void Quicksort(int num[], int start, int end);
//快速排序:利用基准数,进行填坑 分半法
void Quicksort(int num[],int start,int end) {
int i, j;
i = start;
j = end;
//基准数
int temp = num[start];//从小到大
if (i<j) {
while (i<j)//当i==j时才退出!
{
//从右到左 j 找比基准数小
while (i<j && num[j]>temp) {
j--;
}//找到了进行填坑
if (i < j) {
num[i] = num[j];
i++;
}
//从左到右 i 找基准数大
while (i < j && num[i] < temp) {
i++;
}
if (i < j) {
num[j] = num[i];
j--;
}
}
num[i]= temp;
//左半
Quicksort(num, start, i - 1);
//右半
Quicksort(num, i + 1, end);
}
}
速度对比:
快速排序>希尔排序>插入排序>选择排序>冒泡排序。