大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 hot資訊 數據結構排序算法總結

數據結構排序算法總結

更新時間:2022-06-09 10:19:57 來源:動力節點 瀏覽962次

數據結構排序方法有很多,動力節點小編來給大家進行總結。

插入排序

1.直接插入排序:

//直接插入排序時間復雜度:O(n*n);空間復雜度:O(1);穩定的(指相同元素相對位置不變)
void insertSort(int A[], int n){
         int i, j;
         for (i = 1; i <n; i++){         
                   int tmp = A[i];
                   for (j = i - 1; j >= 0 && tmp < A[j]; j--)                       
                            A[j + 1] = A[j];          
                   A[j + 1] = tmp;
         }
}

2.折半插入排序:

//折半插入排序  時間復雜度:O(n*n)空間復雜度:O(1)穩定的
void insertSort(int A[], int n){
         int i, j,high,low,mid;
         for (i = 1; i < n; i++){
                   int tmp = A[i];
                   low = 0; high = i - 1;
                   while (low<=high)
                   {
                            mid = (low + high)/ 2;
                            if (A[mid] > tmp) high = mid - 1;
                            else low = mid + 1;
                   }
                   for (j = i - 1; j >high; j--)
                            A[j + 1] = A[j];
                   A[high+1] = tmp;
         }
}

3.希爾排序:

//希爾排序時間復雜度:O(n*n)空間復雜度:O(1)不穩定
void shellSort(int A[], int n){
         int i, j, dk;
         for (dk = n / 2; dk >= 1; dk = dk / 2){
                   for (i = dk; i < n; ++i){
                            int tmp = A[i];
                            for (j = i - dk; j >= 0 && tmp < A[j]; j -= dk)
                                     A[j + dk] = A[j];
                            A[j + dk] = tmp;
                   }
         }
}

總結:

直接插入排序時間分為三部分:n次遍歷、后移次數、比較次數,折半插入排序減少了比較次數,希爾排序可能減少了比較和后移次數;

交換排序

1.冒泡排序:

//冒泡排序  時間復雜度:O(n*n)  空間復雜度:O(1)穩定的
void bubbleSort(int A[], int n){
         int i, j;
         bool flag;
         for (i = 0; i < n - 1; i++){
                   flag = false;
                   for (j = n - 1; j > i; j--){
                            if (A[j] < A[j - 1]){
                                     swap(A[j-1],A[j]);
                                     flag = true;
                            }
                   }
                   if (!flag){
                            return;
                   }
         }
}

2.快速排序:

//快速排序時間復雜度:O(N*log2 N)空間復雜度:O(1)不穩定
int partition_(int A[], int low, int high){
         int p = A[low];
         while (low<high)
         {
                   while (low<high&&A[high] > p) high--;
                   while (low<high&&A[low] < p) low++;
                   if (low < high){
                            swap(A[low], A[high]);
                            if (A[low] == p&&A[high] == p)
                                     low++;
                   }
         }
         A[low] = p;
         return low;
}
void quickSort(int A[], int low, int high){
         if (low < high){
                   int pivotpos = partition_(A, low, high);
                   quickSort(A,low,pivotpos -1);
                   quickSort(A,pivotpos+1,high);
         }
}

選擇排序

1.簡單選擇排序:

//簡單選擇排序  時間復雜度: O(n*n)空間復雜度:O(1)不穩定的
void selectSort(int A[], int n){
         int i, j, min;
         for (i = 0; i < n-1; i++){
                   min = i;
                   for (j = i + 1; j < n; j++)
                            if (A[j]<A[min]) min = j;           
                   if (min != i) swap(A[i], A[min]);
         }
}

2.堆排序:

//堆排序  時間復雜度:O(N*log2N)空間復雜度:O(1)不穩定的
void adjustDown(int A[], int k, int len){
         int tmp = A[k];
         for (int i = 2 * k + 1; i < len; i = 2 * i + 1){
                   if (i<len - 1 && A[i] < A[i + 1])
                            i++;
                   if (tmp >= A[i])  break;
                   if (A[i] > tmp){
                            A[k] = A[i];
                            k = i;
                   }
         }
         A[k] = tmp;
}
void buildMaxHead(int A[], int len){
         int i;
         for (i = len / 2-1; i >=0; i--)
                   adjustDown(A,i,len);        
}
void heapSort(int A[], int len){
         buildMaxHead(A,len);    
         for (int i = len - 1; i > 0; i--){
                   swap(A[i],A[0]);
                   adjustDown(A,0,i);
         }
}
//向上調整
void adjustUp(int A[], int k){
         int tmp = A[k];
         int i = k / 2;
         while (i >= 0 && tmp > A[i]){
                   A[k] = A[i];
                   k = i;
                   i = i / 2;
         }
         A[k] = tmp;
}

二路歸并排序

//二路歸并排序時間復雜度O(N*log2N)空間復雜度O(n)  穩定的
int n = 10;
int* B = (int*)malloc((n + 1)*sizeof(int));
void merge(int A[], int low, int mid, int high){
         int i, j, k;
         for (k = low; k <= high; k++)
                   B[k] = A[k];
         for (i = low, j = mid + 1, k = i; i <= mid&&j <= high;k++){
                   if (B[i] <= B[j])
                            A[k] = B[i++];
                   else
                            A[k] = B[j++];
         }
         while (i <= mid) A[k++] = B[i++];
         while (j <= high) A[k++] = B[j++];   
}
void mergeSort(int A[],int low,int high){
         if (low < high){
                   int mid = (low + high) / 2;
                   mergeSort(A,low,mid);
                   mergeSort(A,mid+1,high);
                   merge(A, low, mid, high);
         }
}

以上就是關于“數據結構排序算法總結”介紹,大家如果對此比較感興趣,想了解更多相關知識,可以關注一下動力節點的Java在線學習,里面的課程從入門到精通,細致全面,很適合沒有基礎的小伙伴學習,希望對大家能夠有所幫助哦。

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術文檔推薦 >>
主站蜘蛛池模板: 夜夜操天天摸 | 五月天色中色 | 欧美午夜场 | 亚洲高清免费在线观看 | 四虎4hu影库免费永久国产 | 97国产在线公开免费观看 | 国产亚洲精品sese在线播放 | 成人欧美精品大91在线 | 午夜影院欧美 | 午夜视频福利在线 | 国产国拍亚洲精品福利 | 亚洲四虎永久在线播放 | 日本h在线精品免费观看 | 国产性色视频在线高清 | 国产99视频在线 | 国产在线看不卡一区二区 | 国产在线短视频 | 一本久草 | 国产麻豆久久 | 国产精品视频一区牛牛视频 | 激情国产白嫩美女在线观看 | 爱久久www.35669| 欧美高清一区二区三区欧美 | h在线免费视频 | 一级毛片免费播放 | 好色亚洲 | 亚洲精品高清国产一线久久97 | 欧美日本黄色片 | 曰曰鲁夜夜免费播放视频 | 一级做a爱片特黄在线观看 一级做a爱片特黄在线观看免费看 | 久久婷婷五色综合夜啪 | 农村女人十八毛片a级毛片 农村三级孕妇视频在线 | 天天操狠狠操夜夜操 | 伊在人香蕉99久久 | 亚洲欧美日本国产综合在线 | 青青草国产三级精品三级 | 精品视频 九九九 | 天天干天天做 | 久久成人永久免费播放 | 久青草国产观看在线视频 | 成人在线视频免费观看 |