基本排序算法

来源:互联网 发布:主流建站软件 编辑:程序博客网 时间:2024/06/08 15:03

【1】插入排序

将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。

要点:设立哨兵,作为临时存储和判断数组边界之用。

直接插入排序示例:



插入排序的主要思想是将元素进行移动,空出适合位置进行插入。从而达到排序效果代码如下:
#include<iostream>using namespace std;void print(int a[]){  for(int i=0;i<9;i++){cout<<a[i]<<" ";}cout<<endl;}void InsertSort(int a[],int n){int temp,i,j;  //对顺序表L作直接插入排序for(i=1;i<n;i++){///按降序排列if(a[i]<a[i-1]){   temp=a[i];///临时保存值   for(j=i;j && temp<a[j-1];j--)///将前面的数据向后面移动    a[j]=a[j-1];   a[j]=temp;///在该位置赋值}print(a);}}int main(){int a[]={3,1,2,8,5,6,12,48,69};InsertSort(a,9);return 0;}
</pre><h1 style="line-height:26px"><span style="font-family:KaiTi_GB2312; font-size:24px; color:#3333ff; font-weight:normal">【2】简单选择排序算法</span></h1><p style="color:rgb(51,51,51); line-height:26px"><span style="font-family:KaiTi_GB2312; font-size:18px"><strong>在要排序的一组数中,选出最小(或者最大)的<span class="ca-5">一</span><span class="ca-5">个数与<span style="color:rgb(0,153,0)">第1个位置</span>的数交换;</span><span class="ca-5">然后在剩下的数当中再找最小(或者最大)的与<span style="color:rgb(0,153,0)">第2个位置</span>的数交换,依次类推,直到第n-1个元素(倒数第二个数)和第n个元素(最后</span><span class="ca-5">一</span><span class="ca-5">个数)比较为止。</span></strong></span></p><p style="color:rgb(51,51,51); line-height:26px"><span class="ca-5"><span class="ca-5"><span style="font-family:KaiTi_GB2312; font-size:18px"><strong>简单选择排序的示例:</strong></span></span></span></p><p style="font-weight:bold; color:rgb(51,51,51); line-height:26px"><span class="ca-5"><span class="ca-5"><img src="http://img.blog.csdn.net/20160505185828701?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></span></p><p style="color:rgb(51,51,51); line-height:26px"><span class="ca-5"><span class="ca-5"><span style="font-family:KaiTi_GB2312; font-size:18px"><strong>选择排序采用双层循环,从后面找最小或者最大的数据进行交换进行排序操作</strong></span></span></span></p><p style="color:rgb(51,51,51); line-height:26px"><span class="ca-5"><span class="ca-5"><span style="font-family:KaiTi_GB2312; font-size:18px"><strong>代码如下:</strong></span></span></span></p><pre code_snippet_id="1673660" snippet_file_name="blog_20160505_2_8404603" name="code" class="cpp">#include<iostream>using namespace std;void print(int a[]){  for(int i=0;i<9;i++){cout<<a[i]<<" ";}cout<<endl;}void ChooseSort(int a[],int n){int i,j;int temp,change;for(i=0;i<n;i++){   temp=i;   for(j=i+1;j<n-1;j++)   if(a[temp]>a[j])   temp=j;  if(temp!=i){///如果不同则进行交换     change=a[i]; a[i]=a[temp]; a[temp]=change;  }  print(a);///输出每一次的排列}//for}int main(){int a[]={3,1,2,8,5,6,12,48,69};ChooseSort(a,9);return 0;}

【3】冒泡排序

在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

代码如下:

#include<iostream>using namespace std;void print(int a[]){  for(int i=0;i<9;i++){cout<<a[i]<<" ";}cout<<endl;}void BubbleSort(int a[], int n){  int temp,i,j;    for(i =0 ; i< n-1; ++i) {  ///n个数需要n-1次循环        for(j = 0; j < n-i-1; ++j) {  ///每次循环需要n-i-1次比较             if(a[j] > a[j+1])              {                  temp = a[j] ;a[j] = a[j+1] ; a[j+1] = temp;              } //if         }  //forprint(a);//输出每一次排序效果     } //for }  int main(){int a[]={3,1,2,8,5,6,12,48,69};BubbleSort(a,9);return 0;}



0 0
原创粉丝点击