目录
1.问题描述
2.问题分析
3.代码编写
4.总结
1.问题描述
1.冒泡排序
2.快速排序
3.直接插入排序
4.折半插入排序
5.希尔排序
6.简单选择排序
2.问题分析
1.冒泡排序主体思想:往前冒泡,第一次把最小的数放在第一个位置,调用交换方法,用布尔变量标识是否进行交换。
2.快速排序:分治递归,选一个关键字,通过一趟排序将待排序列分割成两部分。之后分别对这两部分记录继续进行排序,直到有序。
3.直接插入排序:将一个记录插入到已经排好序的有序表中,右边无序序列不变动,每次将一个数插到左边
4.折半插入排序(优化直插):在有序表中使用折半查找,当low>high时折半查找停止,应将【low,i-1】内元素全部右移,并将A【0】复制到low所指位置
5.希尔排序:先追求表中元素部分有序,再逐渐逼近全局有序,设置增量d,对各子表分别进行直接插入排序,再缩小d,重复过程
6.简单选择排序:第一次先从所有里面选最出小的数,和第一个位置交换;第二次从2——n中选出 最小的,和第二个位置交换;共有(数组-1次)排序(左边有序数列不变动)
3.代码编写
1.冒泡排序
Void BubbleSort(int A[], int n){
For(int i=0;ii; j--) //数组n-1号是最后一个数
If(A[j-1] >A[j] ){
Swap(A[j-1], A[j]);
Flag=true;
}
If(flag==false)
Return;
}
}
Void swap(int &a, int &b){
Int temp=a;
a=b;
b=temp;
}
2.快速排序
int partition(int A[],int low,int high){
int pivot=A[low];//第一个元素作为枢轴
while(low=pivot)
{--high;}//直到low=pivot)
{++low;}
A[high]=A[low];
}
A[low]=pivot;//枢轴元素放在最终位置
return low;//返回存放枢轴的最终位置,后面会传给pivotops
}
void QuickSort(int A[],int low,int high){
if (low
3.直接插入排序
void InsertSort(int A[],int n){
//n为数组元素个数
int i,j,temp;//i指向当前需要插入的元素的位置
for (i=1; itemp; --j) {
//倒序检查前面的有序元素
A[j+1]=A[j];//所有比他大的都右移一位
}
A[j+1]=temp;
}//一轮结束
}
4.折半插入排序
void InsertSort(int A[],int n){
//n为数组元素个数
int i,j,low,high,mid;//i指向当前需要插入元素的位置
for (i=2; iA[0])
{high=mid-1;}//查左子表
else { low=mid+1; }//查右子表
}
for (j=i-1; j>high+1; --j){
//统一后移元素,空出位置
A[j+1]=A[j];
}
A[high+1]=A[0];//插入操作
}
}
5.希尔排序
void shellSort(int A[],int n){
int d,i,j;//d为初始增量
//A[0]是暂存单元,当j小于0时,插入位置已到
for (d=n/2; d>=1; d=d/2) //步长变化,一共多少趟(设d=4)
for (i=d+1; i<=n; ++i)
//数组从1号位有数,0号位空着
//i的初值为子表的第二个元素(i=5)
if (A[i]0&&A[0]
6.简单选择排序
void SelectSort(int A[],int n){
for(int i=0;i
4.总结
八大排序还剩下堆排序和归并排序,下次再写
3.直接插入排序
void InsertSort(int A[],int n){
//n为数组元素个数
int i,j,temp;//i指向当前需要插入的元素的位置
for (i=1; itemp; --j) {
//倒序检查前面的有序元素
A[j+1]=A[j];//所有比他大的都右移一位
}
A[j+1]=temp;
}//一轮结束
}
4.折半插入排序
void InsertSort(int A[],int n){
//n为数组元素个数
int i,j,low,high,mid;//i指向当前需要插入元素的位置
for (i=2; iA[0])
{high=mid-1;}//查左子表
else { low=mid+1; }//查右子表
}
for (j=i-1; j>high+1; --j){
//统一后移元素,空出位置
A[j+1]=A[j];
}
A[high+1]=A[0];//插入操作
}
}
5.希尔排序
void shellSort(int A[],int n){
int d,i,j;//d为初始增量
//A[0]是暂存单元,当j小于0时,插入位置已到
for (d=n/2; d>=1; d=d/2) //步长变化,一共多少趟(设d=4)
for (i=d+1; i<=n; ++i)
//数组从1号位有数,0号位空着
//i的初值为子表的第二个元素(i=5)
if (A[i]0&&A[0]
6.简单选择排序
void SelectSort(int A[],int n){
for(int i=0;i
4.总结
八大排序还剩下堆排序和归并排序,下次再写



