基本排序练习

  数据结构中有最简单最基本的几种排序方式,总结如下,代码用C++实现:

  1 /*插入排序*/
  2 void InsertionSort(int queque[],int n)
  3 {
  4     for (int i = 0; i < n;i++)
  5     {
  6         int j = i;
  7         int key = queque[j + 1];
  8         while (j > 0 && queque[j] > key)
  9         {
 10             queque[j + 1] = queque[j];
 11             j--;
 12         }
 13         queque[j + 1] = key;
 14     }
 15 }
 16 /*简单选择排序*/
 17 void SelectionSort(int queque[],int n)
 18 {
 19     for (int i = 0;i < n;i++)
 20     {
 21         int min = i;
 22         for (int j = i + 1;j < n;j++)
 23         {
 24             if (queque[j] < queque[min])
 25             {
 26                 min = j;
 27             }
 28         }
 29         int temp = queque[i];
 30         queque[i] = queque[min];
 31         queque[min] = temp;
 32     }
 33 }
 34 /*冒泡排序*/
 35 void BubbleSort(int queque[],int n)
 36 {
 37     for (int i = 1;i <= n;i++)
 38     {
 39         for (int j = 0;j < n - i +1;j++)
 40         {
 41             if (queque[j] > queque[j + 1])
 42             {
 43                 int temp = queque[j];
 44                 queque[j] = queque[j + 1];
 45                 queque[j + 1] = temp;
 46             }
 47         }
 48     }
 49 }
 50 /*将要排序的序列拆分*/
 51 int Partition(int queque[],int low,int high)
 52 {
 53     int key = queque[low];
 54     while(low < high)
 55     {
 56         while(low < high && queque[high] >= key) high--;
 57         queque[low] = queque[high];
 58         while (low < high && queque[low] <= key) low++;
 59         queque[high] = queque[low];
 60 
 61     }
 62     queque[low] = key;
 63     return low;
 64     
 65 }
 66 /*对每个序列排序*/
 67 void QSort(int queque[],int low,int high)
 68 {
 69     if (low < high)
 70     {
 71         int part = Partition(queque,low,high);
 72         QSort(queque,low,part - 1);/*递归排序已经划分的子序列QSort*/
 73         QSort(queque,part + 1,high);
 74     }
 75 }
 76 /*快速排序--冒泡的改进*/
 77 void QuickSort(int queque[],int n)
 78 {
 79     QSort(queque,0,n-1);
 80 }
 81 /*堆排序*/
 82 /*调整堆*/
 83 void Heapify(int queque[],int heapsize,int i)
 84 {
 85     int largest = i;//ÏÈÕÒ³ö×î´óµÄ¶ÑµÄË÷Òý
 86     int left = 2 * i;
 87     int right = 2 * i + 1;
 88     if (i < heapsize)
 89     {
 90         if ( left < heapsize && queque[left] > queque[largest])
 91         {
 92             largest = left;
 93         }
 94         if (right < heapsize && queque[right] > queque[largest])
 95         {
 96             largest = right;
 97         }
 98         if (largest != i)
 99         {
100             int temp = queque[largest];
101             queque[largest] = queque[i];
102             queque[i] = temp;
103             Heapify(queque,heapsize,largest);
104         }
105     }
106 }
107 /*建立大顶堆*/
108 void BuildHeap(int queque[],int heapsize)
109 {
110     int i;
111     for (i = heapsize / 2 ;i >= 0;i--)
112     {
113         Heapify(queque,heapsize,i);
114     }
115 }
116 /*堆排序*/
117 void HeapSort(int queque[],int heapsize)
118 {
119     for (int i = heapsize - 1;i >= 2;i--)/*i>=2*/
120     {
121         int key = queque[0];
122         queque[0] = queque[i];
123         queque[i] = key;
124         Heapify(queque,i - 1,0);
125     }
126 }

posted on 2012-05-14 15:28  sprzhing  阅读(200)  评论(0编辑  收藏  举报

导航