基本排序练习
数据结构中有最简单最基本的几种排序方式,总结如下,代码用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 }
 
                    
                 
                
            
         
 浙公网安备 33010602011771号
浙公网安备 33010602011771号