算法是在有限步骤内求解某一问题所使用的一组定义明确的规则。
通俗点说,就是计算机解题的过程。
在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法。
前者是推理实现的算法,后者是操作实现的算法。[-
七大排序算法
不同的算法运算的执行速度不同:
插入排序
动图显示:
示意图:
代码实现:
void InsertSort(int a[], int n)
{
for(int i= 1; i<n; i++){
if(a[i] < a[i-1]){
int j= i-1;
int x = a[i];
a[i] = a[i-1];
while(j>=0 && x < a[j]){
a[j+1] = a[j];
j--;
}
a[j+1] = x;
}
}
}
int main()
{
int n;
cin>>n;
int *a=new int[n];
for(int j=0;j<n;j++)
cin>>a[j];
InsertSort(a,n);
for(int i=0;i<n;i++)
cout<<a[i];
delete []a;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
简单选择排序
动图显示:
示意图:
代码:
void SelectSort(int a[],int n)
{
for(int i=0;i<n-1;i++)
{
int k=i;
for(int j=i+1;j<n;j++)
if(a[j]<a[k])
k=j;
if(k!=i)
{
int t=a[i];
a[i]=a[k];
a[k]=t;
}
}
}
int main()
{
int n;
cin>>n;
int *a=new int[n];
for(int j=0;j<n;j++)
cin>>a[j];
SelectSort(a,n);
for(int i=0;i<n;i++)
cout<<a[i];
delete []a;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
堆排序
动图显示:
代码实现
void HeapAdjust(int a[],int s,int n)
{
int rc=a[s];
for(int j=2*s;j<=n;j*=2)
{
if(j<n && a[j]>a[j+1])
j++;
if(rc<=a[j])
break;
a[s]=a[j];
s=j;
}
a[s]=rc;
}
void CreatHeap(int a[],int n)
{
for(int i=n/2;i>0;i--)
HeapAdjust(a,i,n);
}
void HeapSort(int a[],int n)
{
CreatHeap(a,n);
for(int i=n;i>1;i--)
{
int x=a[1];
a[1]=a[i];
a[i]=x;
HeapAdjust(a,1,i-1);
}
}
int main()
{
int n;
cin>>n;
int *a=new int[n+1];
for(int j=1;j<n;j++)
cin>>a[j];
HeapSort(a,n);
for(int i=1;i<n;i++)
cout<<a[i];
delete []a;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
冒泡排序
动图显示:
代码实现
void BubbleSort1(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=0;j<sz-i-1;j++){
if(arr[j]>arr[j+1]){
int tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
}
void BubbleSort2(int *arr,int sz){
int i = 0;
int j = 0;
assert(arr);
for(i=0;i<sz-1;i++){
for(j=sz;j>i;j--){
if(arr[j]>arr[j-1]){
int tmp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = tmp;
}
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
快速排序
动图显示:
代码实现
--------------------- 参考代码 -------------------------
void quiksort(int a[],int low,int high)
{
int i = low;
int j = high;
int temp = a[i];
if( low < high)
{
while(i < j)
{
while((a[j] >= temp) && (i < j))
{
j--;
}
a[i] = a[j];
while((a[i] <= temp) && (i < j))
{
i++;
}
a[j]= a[i];
}
a[i] = temp;
quiksort(a,low,i-1);
quiksort(a,j+1,high);
}
else
{
return;
}
}
void main()
{
int arry[5] = {23,1,21,4,19};
quiksort(arry,0,4);
for(i=0;i<5;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}